|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
* X7 U$ S; N) E4 D, g#include <Iphlpapi.h>
& K* S v* w( u#include <iostream>
) Y+ b2 P8 W( Iusing namespace std;1 W8 f0 P% S/ f
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库+ X/ f6 \( m+ r; G
6 E9 z: b J8 P ?int main(int argc, char* argv[])0 s: Q" s* h8 n l1 J
{! r3 ?/ u- k, ?$ C" P. n: ?3 L( q
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息" g% u1 I$ `. J) Y) X2 u! d5 g c
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();: z- Y4 t3 o+ A* J N% p0 Z
//得到结构体大小,用于GetAdaptersInfo参数
; R. Y4 |/ f* v" }" M8 E* @* y unsigned long stSize = sizeof(IP_ADAPTER_INFO);- O' l( I7 p$ c0 ]7 g: X
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量5 B7 F+ Q5 ]' Y8 x1 r
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
$ w& Q t4 z. u. T //记录网卡数量
, J& r1 }, Q5 }7 X) L3 W/ Y int neTCardNum = 0;
" t% {) l; y' }! V* {# h' o f //记录每张网卡上的IP地址数量0 {" a: O' v3 k s2 Z$ ?
int IPnumPerNetCard = 0;) d& ?/ A2 k+ }& h
if (ERROR_BUFFER_OVERFLOW == nRel)
6 H( C) s# W2 {3 k, ~( i; H {
( F4 Z' O, i. z% i l% A% A //如果函数返回的是ERROR_BUFFER_OVERFLOW
8 A+ j. h. w5 X" P: a+ N //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小% x, R3 G; v/ v2 T; U; t
//这也是说明为什么stSize既是一个输入量也是一个输出量
4 Z: T" B2 T9 a- B) I& I //释放原来的内存空间! g) ~3 Y- A0 N3 Z/ r
delete pIpAdapterInfo;
1 C% ~. Z, F9 ]# c" G* Z //重新申请内存空间用来存储所有网卡信息# e7 r2 @' x3 N7 C4 G
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];# G, y# y1 @$ B
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量6 K. T' Z# s# A+ B" ?
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
/ U2 W. R3 ]0 j) B6 Q0 y }# p m" _! Q4 G5 p( S& j" J
if (ERROR_SUCCESS == nRel)
6 c8 E+ ~8 E# r. v1 N) A {
0 P- a, {- W0 T" h. V+ K //输出网卡信息1 r! b3 C6 M8 C0 D
//可能有多网卡,因此通过循环去判断* S& l) T. C! W& T
while (pIpAdapterInfo)$ |8 u$ z- c x& H' G" \1 @
{
% Z; U1 s0 _: {# `6 Y/ V- h cout<<"网卡数量:"<<++netCardNum<<endl;
+ S! [( Y# D0 T: X, m" Z* P cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
! A* W0 j9 A" Z cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
" u l. c$ H' x% T9 l switch(pIpAdapterInfo->Type)
. X) s5 ]- |/ x {0 Y# d& z$ Y& ^ q
case MIB_IF_TYPE_OTHER:& K* e, m7 U S" W! [
cout<<"网卡类型:"<<"OTHER"<<endl; e4 `2 E `4 Y. g
break;
3 p8 O4 S+ s; m6 H b6 P; k/ c case MIB_IF_TYPE_ETHERNET:7 c5 |0 c2 D& f) b9 L0 k- w
cout<<"网卡类型:"<<"ETHERNET"<<endl;
, j9 y6 ~' P6 e. u( f" u# D break;
. `" c" Y9 l- t& ~- y# f case MIB_IF_TYPE_TOKENRING:9 g8 L( ?( k9 p* i5 h1 J+ [
cout<<"网卡类型:"<<"TOKENRING"<<endl;
" D" o" x5 c% Q0 i& I break;+ s* m- V2 z1 o5 h! W4 g3 L
case MIB_IF_TYPE_FDDI:
; @2 ], B! i* Z, c2 D" ~ cout<<"网卡类型:"<<"FDDI"<<endl;6 ~* E5 S( S$ M9 O. K3 S! s
break;3 ]& c$ {; n0 P. n
case MIB_IF_TYPE_PPP:
0 ^. z2 T8 g4 E5 d" _. J# _6 S printf("PP\n");; }% G, t+ Q, |- q$ R7 x# L
cout<<"网卡类型:"<<"PPP"<<endl;
$ _6 r9 Q6 H! k break;: W9 b. v- L8 z& I& ^
case MIB_IF_TYPE_LOOPBACK:3 c% D7 d( V* J$ G% K: u% }
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
% }8 F0 [6 y. Y8 Q& [1 T+ o break;
7 p/ ?% Y8 `- C: V* o" R! t# F" y6 p case MIB_IF_TYPE_SLIP:+ [7 e/ e8 `& \( }1 i' ]! o
cout<<"网卡类型:"<<"SLIP"<<endl;
$ w% _( m% r% y2 m0 ~6 Y+ ]/ o break;: A( m( _' u, u
default:
, A# ]4 M& Y# r* R5 `" o- s* f0 \$ @$ ?
break;" w5 B- l/ d9 f- x" A+ ^* z {
}
4 J$ C8 D. s8 M% U/ U cout<<"网卡MAC地址:";
1 h8 B1 Y1 V6 } q( U% n x& y for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
+ L; e6 ?0 U! C2 }! I if (i < pIpAdapterInfo->AddressLength-1)
1 X. B$ ]& x, E6 n- ~ U$ U6 u {
- U t5 @- |: O4 L' X printf("%02X-", pIpAdapterInfo->Address);# q6 H9 n+ a/ h3 |0 p) l
}
- G: Z) }; F) x, | x. H else! ]7 B/ d0 ^* Y$ S9 A9 l/ M
{
0 U& ]; H- }# a' e4 w. X" l; y# ~& \ printf("%02X\n", pIpAdapterInfo->Address);% W( m! V6 b7 {2 _& {
}# k: _# q/ f; M$ R. D4 n$ _
cout<<"网卡IP地址如下:"<<endl;+ }: \5 m" P9 w0 V" \
//可能网卡有多IP,因此通过循环去判断
; U, |- D: E* R# k/ G IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);3 {* o- _& S' a. B% P- M
do5 C! b) E$ F6 M* Q) I
{
9 {8 Y, O1 K' \% K( V cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
# s6 j' g3 e+ s5 P1 [ cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;+ D* d6 ]7 o% f; x- `
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
5 S' j. `: b- @% f5 V cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;/ a! [+ C1 b/ ]0 }) x& U2 ^
pIpAddrString=pIpAddrString->Next;
: j+ t5 D6 z+ e% w2 @ } while (pIpAddrString);
! c0 t6 P, F+ Z) }) ~ pIpAdapterInfo = pIpAdapterInfo->Next;
, V$ S; w2 ?$ R& m' t& l! |) D+ O/ a cout<<"--------------------------------------------------------------------"<<endl;
' n. W9 J9 M% R }
9 p! T- R6 U& \5 V1 ]8 P! _: k+ i
( N% j/ J! [3 ^ }
7 d( k/ s; {" b! X0 w //释放内存空间
3 D% R1 e |' I! D1 c: K/ X if (pIpAdapterInfo) {# B1 Z' d$ l: Z. g
{/ c p6 h9 C! O# u
delete pIpAdapterInfo;
' m2 j) q$ w2 u9 k4 ^ }. l2 x3 N4 T- |
( O" }& g8 d# h) r3 k2 q return 0;
' n6 |' E9 O* m; D}
6 t+ @: W8 Q x: A5 @! g
/ ?) L4 Q' F+ c7 S# B |
|