|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
) z: R4 L: ~$ T( y5 Q+ x7 C/ f- v: z#include <Iphlpapi.h>
. V& b4 b7 S. A: |. S2 C#include <iostream>
+ J: `# [& {3 y" F; x! Zusing namespace std;' l& W7 ^# J$ _5 d8 j0 y) g. T
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库+ m2 ^6 p4 F* R) H, W# y+ E
- g M- V w" ~% }8 M, Kint main(int argc, char* argv[])
4 \1 Q( H1 Q V6 Z2 e3 c0 H{
+ y& I9 E& G) S5 M9 X+ L( h //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
) z% v9 D7 p# Z; M PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();; y3 f. X: Q- @: e
//得到结构体大小,用于GetAdaptersInfo参数
/ ~) A! w0 K8 q5 y3 ^7 t, v. [ unsigned long stSize = sizeof(IP_ADAPTER_INFO);; N5 B$ p* J- _
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' J" ]/ d0 b& I. D U
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
3 b0 O* N# A5 V1 I% O //记录网卡数量 O0 {7 S2 x8 Y0 Y
int neTCardNum = 0;
; o% o4 d/ Q6 {: G8 E; R //记录每张网卡上的IP地址数量
# U( q& T; m( q int IPnumPerNetCard = 0;7 a2 @3 p2 V7 y8 ^# m w7 A
if (ERROR_BUFFER_OVERFLOW == nRel)
- ~% |+ D" F* f {, H+ Q1 R7 F% S% q2 u, ~5 |% \/ T
//如果函数返回的是ERROR_BUFFER_OVERFLOW
- l. Q5 D5 m( C% `, l8 S- q //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小- q$ z+ X5 ]1 s% T! ^
//这也是说明为什么stSize既是一个输入量也是一个输出量
) h/ c1 s3 O1 @, P+ H //释放原来的内存空间% T% K; P7 P) G3 }3 j& f
delete pIpAdapterInfo;" l; R7 _( J3 i: b9 K/ F! T
//重新申请内存空间用来存储所有网卡信息; X" Z2 _, b* ]- j+ p4 B
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];/ _/ P8 s+ k$ f# [9 ~; `7 _+ Y' S
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量; V5 ]- @& e5 c% B
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
: p) W, [: T; ^0 N }% s6 p0 }% s+ i3 y" }9 A
if (ERROR_SUCCESS == nRel)
$ K8 Y; l. v f {
6 G) Z& b1 N! W, G$ L //输出网卡信息
; j& W/ ^) Z9 H" p5 ?. d //可能有多网卡,因此通过循环去判断& F/ \" }; u- T0 _! a) X! |
while (pIpAdapterInfo)9 U$ Z% Y6 V" |
{9 L; G3 m- ^; w
cout<<"网卡数量:"<<++netCardNum<<endl;0 F% r4 S3 |& w! ~3 Z/ g+ j4 r
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;3 S8 N* k1 T( @; g
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;+ J4 `. x* `; D- h
switch(pIpAdapterInfo->Type); I+ `3 ^8 W' @& g- Z3 r8 R' H/ y7 \
{* Q% p2 |- G6 m. A! m7 D- b2 X6 d+ j
case MIB_IF_TYPE_OTHER:
7 m( E( y' S3 `' P9 A+ f3 z; V cout<<"网卡类型:"<<"OTHER"<<endl;: i9 {, U; ?3 ^/ n" T; |
break;
0 S8 U, j+ X9 Q( Y9 O' ~ case MIB_IF_TYPE_ETHERNET:
9 f/ S9 j. T% w cout<<"网卡类型:"<<"ETHERNET"<<endl;/ r" H0 u7 X( i5 E$ E; I
break;
K: }. H1 J% v4 ]- V3 ?; { case MIB_IF_TYPE_TOKENRING:
4 H) @3 p/ K9 h6 H2 } Y3 Y cout<<"网卡类型:"<<"TOKENRING"<<endl;
0 T* l6 H9 G' ?+ F0 H6 t break;' Z& G0 F q2 p' |
case MIB_IF_TYPE_FDDI:$ E& z; G5 }; G
cout<<"网卡类型:"<<"FDDI"<<endl;
) m- v" @# q8 J; i7 r& B; N. K break;) X' d: P. I& A6 l3 f
case MIB_IF_TYPE_PPP:! Q1 g E+ n, N; Z4 R
printf("PP\n");" K6 u, F# y* c, K+ @
cout<<"网卡类型:"<<"PPP"<<endl;/ Y2 G; P7 z6 _5 C5 i- e
break;0 ?1 G) y# h: S* m4 V4 Y) K4 ]
case MIB_IF_TYPE_LOOPBACK:
/ N) ]2 N1 v* y2 t cout<<"网卡类型:"<<"LOOPBACK"<<endl;
1 K% z! c6 a2 `, b0 O, } break;
. r% B8 ], u* H9 P4 _ case MIB_IF_TYPE_SLIP:6 `! p r% z4 y' c) a0 F
cout<<"网卡类型:"<<"SLIP"<<endl;
0 g2 T/ [9 d$ o! r( u2 g break;
& l: B0 w) n. _5 A! G4 }' _ default:2 {5 S% s3 c, E8 [: ~: l1 [
+ ?! V5 C0 V/ x/ N" R& ~ V4 W9 j6 z
break;
9 G& m( a9 _4 n5 j }. a. d- p) [$ _2 k) W2 f/ P% W
cout<<"网卡MAC地址:";5 @' h( n4 p; _6 q
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
1 p; f9 t/ y4 L( W if (i < pIpAdapterInfo->AddressLength-1)0 [% H" s+ n7 s
{
+ N1 b3 Q+ n* \# M' `7 w8 R4 a printf("%02X-", pIpAdapterInfo->Address);
* L: o. M8 ^6 R b: g6 z* Z3 J' N }
9 [. m* x) u5 M/ E1 L else
$ L$ H$ R2 f5 H, m {
7 l' w; ~5 l" r1 @: n. v& ]' J) j printf("%02X\n", pIpAdapterInfo->Address);: D* o2 I# j/ O. i4 P. m8 g0 b8 ]
}
5 n- P) J; X& x. N1 \( A cout<<"网卡IP地址如下:"<<endl;" B) k( s' s$ `+ \$ T4 ^; i- ^
//可能网卡有多IP,因此通过循环去判断
& d4 A v' W( B7 t. O) p2 c. {4 o' \5 a IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);& S# S4 i( `. C
do
8 \" [ K/ O7 K! L! n- p) \, i {7 R7 `2 Z8 t, \& `5 G5 Q# f2 q4 f
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;" _' K# Z8 j1 j" n3 g, O
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
' M/ Z; r6 n/ a cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
+ G1 L: V# n7 K' _ cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;1 D- Q. q8 h5 j8 m8 J6 {# k
pIpAddrString=pIpAddrString->Next;4 N% b+ P9 Q+ l. z) m$ |+ N
} while (pIpAddrString);
: T* R) V }) @% G6 q+ c- h$ U pIpAdapterInfo = pIpAdapterInfo->Next;0 H9 \* N# n0 C4 x+ s& c
cout<<"--------------------------------------------------------------------"<<endl;
' k- ^5 y% `- ]7 J2 W7 e }' {8 x" q3 O: X1 a7 i/ x
# U* f+ D4 F% T0 N7 {4 `% K1 C }
4 u) C( T* t2 |! ?. c: j: u //释放内存空间
7 M+ Z. s; I" I6 _# d8 j0 y+ l if (pIpAdapterInfo)! |$ ^; W3 P9 o
{+ t7 b3 o, C+ b/ ~( E- x
delete pIpAdapterInfo;2 k4 i4 j! v8 ?4 ?# J
}
7 S |/ ?2 h" B
% O. B. {6 p+ ~3 R return 0;5 e' g6 O7 k! e- A' K) b- \; D
}
. \. ~ {) `5 @( J! k5 l# E5 `
) g) u8 W( k9 j; i W2 p7 `: \" I |
|