|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>, s: d2 o1 \ w7 [/ \
#include <Iphlpapi.h>
3 f' c( S+ q# I- h#include <iostream>
# Q' J" d* H7 |) ?. X fusing namespace std;
0 s; v( m: b& S( K9 s5 R#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库. \3 }1 [$ K7 u
$ `" `; N$ L6 }4 D5 N; ^9 ~ Fint main(int argc, char* argv[])
4 T0 c; h+ A: P) W- Z; ]) A: D{
, O+ e$ u/ w% {( `! v. w //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
0 r. I" N n0 Y( E% V+ u) f2 h _ PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();3 Z" e8 B" |& e' B1 U
//得到结构体大小,用于GetAdaptersInfo参数
) E$ J+ L$ J8 I' O2 N! q unsigned long stSize = sizeof(IP_ADAPTER_INFO);
! g# e. f+ {# A! s //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量( ]. u% x, y' ^% @
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
4 u4 m* R: W7 f9 x, P( t1 H //记录网卡数量
6 l9 s6 |. A) u" e$ J/ d int neTCardNum = 0;# w: J) w2 [3 n$ x
//记录每张网卡上的IP地址数量
6 p# o8 U# z3 N3 \9 b0 q int IPnumPerNetCard = 0;
: d) p; V* j1 J8 l( @ if (ERROR_BUFFER_OVERFLOW == nRel)
( d5 z; H8 M2 q. M {& S! @7 t5 l: U$ u# D
//如果函数返回的是ERROR_BUFFER_OVERFLOW
* g1 \' e- n- T0 ~ //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
0 K' x, n& |% U3 V2 u //这也是说明为什么stSize既是一个输入量也是一个输出量
5 P# a8 [5 P5 E& ^# A& k //释放原来的内存空间
* W5 q+ i- ?0 z/ R1 J! M2 u" M delete pIpAdapterInfo;6 V1 z& {1 [2 y* `: I ~! y
//重新申请内存空间用来存储所有网卡信息: w; l% O$ M0 S' c7 q
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
. x: @6 {/ h$ j9 U //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
4 Q% r+ U D8 ~ nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
" `2 }; h g: S# y. }/ L3 k }0 P$ w0 n4 r' l! g( S" z
if (ERROR_SUCCESS == nRel); l' v1 Z) u9 }" p1 V
{) }. J+ ?" y0 f$ l4 |% O+ p* F" r/ Q
//输出网卡信息. Z3 F' ~7 g, e" B' d) A$ s0 H
//可能有多网卡,因此通过循环去判断
' G* G6 Y! M1 p) e/ s while (pIpAdapterInfo)
1 ?2 k+ o! o s) T {
: |: r! B* R& }2 t1 _ cout<<"网卡数量:"<<++netCardNum<<endl;7 y: P1 W7 N" w! b8 H" a8 M; M: x) S
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
1 t6 a s+ P3 y' o5 Q cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;3 r3 _6 U" b" o3 Q1 q5 B! |4 h
switch(pIpAdapterInfo->Type)
$ R: o) E, @/ H; j4 p5 q {
9 ~9 z: ]& k0 F6 } case MIB_IF_TYPE_OTHER:
+ {! D5 R' M: ]9 D4 f, G. \ cout<<"网卡类型:"<<"OTHER"<<endl;
" i, q/ [: U9 ? B. d. \8 C break;
% ?9 C' F% ]) w2 b case MIB_IF_TYPE_ETHERNET:( v8 \2 ]6 Q% v7 f+ q0 B
cout<<"网卡类型:"<<"ETHERNET"<<endl;: c4 k+ ?( o, U3 }' M+ r% n% J1 R
break;
" [+ a2 N6 `" Y( K case MIB_IF_TYPE_TOKENRING:
5 y# r+ O/ i* o& r. R cout<<"网卡类型:"<<"TOKENRING"<<endl;0 W& W: }; ?8 P
break;
. H. v( {/ a6 a4 G- b case MIB_IF_TYPE_FDDI:1 c9 j/ U4 K. S" @5 ^/ l5 [- h* y
cout<<"网卡类型:"<<"FDDI"<<endl;
+ V9 g1 T" ~( X+ F1 S! s j% {6 P break;
4 ^# g! x! U7 s) V5 J! j4 V6 a case MIB_IF_TYPE_PPP:
6 H/ x5 w. W# }: _4 F% f2 a& A printf("PP\n");
) _9 N$ U S0 |; T" `. m cout<<"网卡类型:"<<"PPP"<<endl;
; n3 N1 I# O& S, `9 O7 J5 \. k break;
- n5 ^! D% J) | I3 y) q case MIB_IF_TYPE_LOOPBACK:; `* V0 g* k) J( }+ N
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
5 g6 ^- ^" Y- a7 _ break;
( ], y* M1 V" D3 ]/ k8 T0 t1 l; A) T case MIB_IF_TYPE_SLIP:
% i! y- }- q2 u. x cout<<"网卡类型:"<<"SLIP"<<endl;
9 ?, h7 V, p% \9 m0 z8 O- \6 B+ n break;
) L: V- u$ X9 d! A' T3 V default:
2 G0 Q o1 l. o+ ]% ~/ L
# Y$ e' C$ `/ D- H, o2 t: E break;8 \7 Z/ B3 U1 r/ l- f. m
}% F2 I Q1 K" R5 l. z: Y* L
cout<<"网卡MAC地址:";) k- y% q" Z4 l, H5 {
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)9 x. r3 r. b. D$ U- w( e
if (i < pIpAdapterInfo->AddressLength-1)
0 Y1 m0 f6 r! B Z {
& l V |* y1 T3 T& C printf("%02X-", pIpAdapterInfo->Address);/ w/ C( m' O9 e' T k* B: A, t
}) h4 [* G( B* j& J$ C
else
* _: V3 `- o8 L9 S {2 L# {0 W: P, v G: `
printf("%02X\n", pIpAdapterInfo->Address);# y: g$ |5 P6 S- w
}
) C+ n" \% o. }: Z9 x9 Z. z cout<<"网卡IP地址如下:"<<endl;
7 p* l# e# X2 L k //可能网卡有多IP,因此通过循环去判断
9 D& a* |, _ H/ `$ V0 k) E% M' x IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
' f- ^& y( p# O6 N8 Y1 V0 Y$ Y do
7 q0 V& V7 w) m, H+ v1 Z {/ G2 V. }# G! N X4 R
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;0 J8 r1 ~9 g6 }; U/ |: s
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
' y; {( M$ f. s cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
- x4 h: K2 g3 V& T/ ^0 ~ cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;4 F2 X/ S2 Y+ h+ P+ f5 c
pIpAddrString=pIpAddrString->Next;3 _; `3 e6 u6 C1 Q" P! R
} while (pIpAddrString);
# G4 c, a" F1 C* Z: m: z- r pIpAdapterInfo = pIpAdapterInfo->Next;
- i0 _. ]% J! ^' b cout<<"--------------------------------------------------------------------"<<endl;* u$ y: g/ v( x
}7 L" @: W6 k5 x
4 d b8 y6 ?; ?6 B2 h: i0 X
}* Y* I5 w# `* d, l; w; Q- I7 F
//释放内存空间
& a: [" m: F& @; b1 ~ if (pIpAdapterInfo); \. d/ {, I" }
{: i" H4 A! J. u4 R: g* A
delete pIpAdapterInfo;% ?$ _; d, Z) ^2 b' ~) @
}% W" N2 K& d% x) [3 t( t
) M7 X; b' }( f$ T& n7 j2 M2 ^
return 0;6 O1 {, j& F1 N, @4 N
}
6 C/ U) ^$ @8 E+ h( }0 z$ K: u6 K0 M) L
. S2 a3 Q, K. i5 o" i" P, I B% ^ |
|