|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
#include <WinSock2.h>
( H. Z; u- o0 B. f9 x2 ]/ W! p#include <Iphlpapi.h>5 h7 s0 o" g7 J6 U0 Q7 g4 m+ N
#include <iostream>
& v, g1 P x# ^1 e6 E! E, pusing namespace std;
0 U$ d6 T* I$ S9 S# `4 o/ ]#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库7 {4 s ~* o7 Z2 |/ g7 u
; \# Y8 J- Z7 d/ Jint main(int argc, char* argv[]). k& X9 ~+ x+ v2 H2 |
{9 q9 D9 C8 A; H6 v* }+ j9 {# b& q
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
5 I. q1 Z" n P3 M! w PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();6 Y' Y9 \, m1 [1 u+ I E8 q
//得到结构体大小,用于GetAdaptersInfo参数! } a( ?# m( }6 \8 v' h) x7 j
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
+ }+ K1 n& \! F, ^ ]2 _ //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量4 l' E& \; `* f( ~+ }* J
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
+ G" N1 W4 z S //记录网卡数量
# D9 ]0 T6 X1 p( u4 ]& G int neTCardNum = 0;$ G s: l) X2 C8 t, n; X6 {% d
//记录每张网卡上的IP地址数量3 s I- }' [/ c2 L7 b# D/ \
int IPnumPerNetCard = 0;
# ?" m; r: L& ~- a3 V+ ? if (ERROR_BUFFER_OVERFLOW == nRel)
8 F3 o) K$ f$ U {+ i6 O( Z0 l0 \ @' w: G( @$ @
//如果函数返回的是ERROR_BUFFER_OVERFLOW
0 u' ?' }0 y+ N% Y( b: O1 E. i# w //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小+ X3 D* W# G! Z
//这也是说明为什么stSize既是一个输入量也是一个输出量& {4 a( G( l( A% |+ B
//释放原来的内存空间& Q0 C% g, M/ X+ ]( |, [
delete pIpAdapterInfo;$ h- `+ l1 N6 g1 G$ g& m- g
//重新申请内存空间用来存储所有网卡信息
' m; S. M2 O' } pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];/ }: N" Q( k, f: w
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
& Q4 A8 C# ?+ q8 t6 P nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); - z. ?) t5 c$ x, r
}
( @ V$ G& v% o$ A) o5 j# e/ c if (ERROR_SUCCESS == nRel)
% C) E I- `- T' j# o {
5 D, w: _! i8 \8 Z //输出网卡信息
% E8 I; m3 d1 _6 ^6 a3 D' c //可能有多网卡,因此通过循环去判断
& h8 [' j4 l* U0 ~: [! k while (pIpAdapterInfo)$ D2 Z' B" c- N6 J$ i2 u" Q
{, ~9 o8 |! h* A/ V9 j, E
cout<<"网卡数量:"<<++netCardNum<<endl;
. _2 R# L! v$ u cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
* ~2 O" V( G' i6 Q- Y2 G1 u cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;, z. j. o+ O; {# a' Z
switch(pIpAdapterInfo->Type)+ F F7 y- f$ ?! U6 p
{& c$ u$ @2 d( A6 I0 M! t/ B2 ?$ F
case MIB_IF_TYPE_OTHER: c2 f. i; R$ j% h
cout<<"网卡类型:"<<"OTHER"<<endl;3 t3 e F- A% A5 ^
break;' e* a' {/ q$ Q* u; J
case MIB_IF_TYPE_ETHERNET:6 u' p- l E$ U# T2 j) Z2 m3 A
cout<<"网卡类型:"<<"ETHERNET"<<endl;
+ c6 I* Q1 X# j! M& L! T* x break;
- K4 \/ G1 y! i$ M- N) O( U% f case MIB_IF_TYPE_TOKENRING:
) h9 n& l$ t. }+ u7 z& {; N# N9 t$ W$ W cout<<"网卡类型:"<<"TOKENRING"<<endl;) S+ Z- `) i5 p% w& m+ b3 h) G
break;, f) }0 U$ ~' V! v: b/ e& R
case MIB_IF_TYPE_FDDI:" v! G# Q8 T5 f$ l; X
cout<<"网卡类型:"<<"FDDI"<<endl;8 S3 C; o+ a6 s+ n% w4 G a
break;, ]- E- X3 I6 |
case MIB_IF_TYPE_PPP:
! t5 _: w9 H7 E4 l printf("PP\n");
1 z; j8 \$ l. c& q: |" Z! Z+ k cout<<"网卡类型:"<<"PPP"<<endl;
; C7 h4 c6 X- B* H" j' h break;
1 ?6 x7 A5 H0 Q6 ~6 i7 H3 O: K case MIB_IF_TYPE_LOOPBACK:
/ @2 _$ S3 ^+ ^ cout<<"网卡类型:"<<"LOOPBACK"<<endl;
7 S/ w* B3 |! ~/ S! P break;# `# }: F; u/ ~, N- }% ]+ H9 f/ ^
case MIB_IF_TYPE_SLIP:9 M1 w/ M/ }1 |7 D" [6 ~$ S
cout<<"网卡类型:"<<"SLIP"<<endl;
2 g; W8 h; t% V6 F4 _ break;8 N* V" v, q7 V- N# i
default:
) q# F7 M9 V- J* n# Y+ {
$ X, k' q, I) V! `: F9 y5 Q break;
1 b ?+ O: \) q( O5 z4 t }
: i6 d m P, \# N! u/ N cout<<"网卡MAC地址:"; j Q0 b' k1 I( K$ k
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
9 g" _6 J' m; I- A if (i < pIpAdapterInfo->AddressLength-1)1 q# x* g" p! a6 v; O3 e4 [1 q) o
{
- r' \1 m/ o) R6 G# S8 A2 R1 ~- y9 T printf("%02X-", pIpAdapterInfo->Address);0 q& |: d- h0 k2 T9 ~( r `
} o* u$ w: @# l9 ^: r- {4 c4 f
else) J' w% r; f- M8 j: l* R
{: i' }4 r2 k6 }
printf("%02X\n", pIpAdapterInfo->Address);
; p6 N9 P( w/ K }
' D$ P: j, b- {- h3 Z: N5 L cout<<"网卡IP地址如下:"<<endl;9 @9 z" _! X6 _5 |9 P: r
//可能网卡有多IP,因此通过循环去判断, c5 C3 f; M0 d, u' O) }. s
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
6 q6 T$ [$ L1 r# V9 }0 p! ^9 W do: I7 R4 b# z; a) s6 r: g
{' N6 T* J) K7 J7 C/ y
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
9 `. B$ H7 S" N5 f. }! H* b cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;5 U' R) u0 b" K7 n
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;5 i0 g' E* w. Y1 }6 h
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
% C8 z3 r9 a7 H+ X& C( N/ ] pIpAddrString=pIpAddrString->Next;
3 c; ? x' D7 Y& d+ K3 w } while (pIpAddrString);* H5 j$ X0 b% H
pIpAdapterInfo = pIpAdapterInfo->Next;' o, k) V& w* R" [
cout<<"--------------------------------------------------------------------"<<endl;% [. q4 j2 G5 P6 S3 R6 f
}
9 Z7 o" K% h H5 e0 u
) T. Q4 M4 ^/ Q. ?; s }% A0 Y; K% T7 r/ a; z2 c8 T% ?: u
//释放内存空间5 F$ W% t+ J/ g y4 b2 y
if (pIpAdapterInfo)
+ e$ s( ~( {! \2 {& | {5 r: w% k7 Z5 \" ?# x" m( R
delete pIpAdapterInfo;
* W5 u" X+ l% G$ o }
( i5 V! t6 N9 O7 u# v ! A2 y3 G0 g& P+ q5 w
return 0;+ m& r% f4 J- w# p2 o: [% W7 m) o
} g' d$ v) B& F# e
; |; U5 `( h% ^3 O& A, k
|
|