|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
3 j/ e* z6 b- O4 t#include <Iphlpapi.h> m w) |2 I8 q+ A8 S1 M: u
#include <iostream>
1 P! B U# h: vusing namespace std;5 J, b& G2 S0 r& p
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库# `5 p* S! S& B, q8 R
* v2 ^6 K% t2 y/ H/ mint main(int argc, char* argv[])5 o3 ]1 T: v3 F% j
{6 K- D6 Y* L% r8 T) c7 U3 b/ \
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息) o) G4 ]* E+ l; J' C: ~
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();) W* I: \" I! d9 u' _# p
//得到结构体大小,用于GetAdaptersInfo参数, R$ v2 \% L9 b% m2 a* H( `2 L
unsigned long stSize = sizeof(IP_ADAPTER_INFO);' \( L# Q$ C1 @
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
0 ]5 O4 {' b. V* f! h int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
& z. L8 d4 G7 ?. W. ] [0 X //记录网卡数量
! ^1 [0 ]7 c @9 F, A- @0 K& b int neTCardNum = 0;
9 ?' W3 f R) N& O7 d( e //记录每张网卡上的IP地址数量
( y: r9 `7 D0 j8 E6 M- E int IPnumPerNetCard = 0;
0 ] b& M# C7 ` if (ERROR_BUFFER_OVERFLOW == nRel)
( l" F' x4 H- C6 ~! X# V {
5 l) K5 L/ l5 A3 T: _+ F8 p v# m/ x //如果函数返回的是ERROR_BUFFER_OVERFLOW; o9 [1 c; Q0 I4 p# G" M) I' \
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
+ Z3 A+ @" w5 [1 n y7 c/ g* _" L //这也是说明为什么stSize既是一个输入量也是一个输出量
1 E3 I2 [- f+ C/ M; [2 v: D, j2 A //释放原来的内存空间7 j6 B6 a: e+ O+ j: i
delete pIpAdapterInfo;
2 F. L( P3 t. x* f8 \0 T //重新申请内存空间用来存储所有网卡信息
% y, f* `+ u# s7 c8 N pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];& V3 F! ~* }" p8 P
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
6 j+ R- D6 s: |6 E( p( q nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); + h6 e$ a, G0 ^8 b3 G6 S2 K
}
; J9 x; e/ o: w$ H, K if (ERROR_SUCCESS == nRel)- r) n7 F0 B% E1 g
{
) r# N7 ~- e7 L/ u( k //输出网卡信息
+ b0 X% d* E. g& e" q //可能有多网卡,因此通过循环去判断) I4 ^, N7 \ H, k' ~5 A7 [8 m. e8 T
while (pIpAdapterInfo)- D1 y# ?2 c$ f; r# p0 z! {9 F5 h
{
- v! I0 C: N' {; I cout<<"网卡数量:"<<++netCardNum<<endl;
' B' G9 j5 e2 N- n' g: `9 P g cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
2 l- h) T. u: ^( K6 \% D5 E cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
$ x, @7 x' f! W( D& e switch(pIpAdapterInfo->Type)
9 e @: g( k3 V/ s: ^. `1 ~ {
2 N, j( Z4 n) E; ?4 ?2 D9 N case MIB_IF_TYPE_OTHER:" h3 a! ?! a+ r& d
cout<<"网卡类型:"<<"OTHER"<<endl;- p8 L: m) q0 E
break;
+ j, D+ P* ^! v' L; p case MIB_IF_TYPE_ETHERNET:
6 c- G3 Q1 `4 [# G9 m4 E0 I' Y2 {* U0 }! } cout<<"网卡类型:"<<"ETHERNET"<<endl;3 a$ Z. X8 i, v; i! ]9 F
break;+ Z# R' L' v$ n$ b' I2 m
case MIB_IF_TYPE_TOKENRING:
+ G$ Y5 n" a- K0 V( o cout<<"网卡类型:"<<"TOKENRING"<<endl;: ~4 F& y$ V* _ Y7 D
break;5 y3 V: j, k1 @" n' h2 `, ^
case MIB_IF_TYPE_FDDI:5 n$ S/ d& b: ^, R
cout<<"网卡类型:"<<"FDDI"<<endl;) Q s1 e, F6 C" j
break;* O. W" m% G1 h" S) @
case MIB_IF_TYPE_PPP:
n3 E! M3 F% T6 G1 C printf("PP\n");
0 y M! D. ?; V, F; w cout<<"网卡类型:"<<"PPP"<<endl;
# _) G, u- ~. ~7 ~ break;) D3 q5 N2 R% k0 f* J w! {1 K2 B
case MIB_IF_TYPE_LOOPBACK:
9 m! @3 H8 S6 S cout<<"网卡类型:"<<"LOOPBACK"<<endl;
) r: F* P; V% y$ G3 Y break;
: J7 k" U( g( x+ R4 n case MIB_IF_TYPE_SLIP:
% T* W6 M/ U: n& v0 g+ n' n cout<<"网卡类型:"<<"SLIP"<<endl;
8 X- _) ]- ]) J break;
5 R! g# _' D9 P, q u default:
8 ~0 q8 A" m) F2 B' Z; _9 D$ H8 a u' T. j' T6 S- w
break;
\0 b5 |9 Y( Z2 N0 S4 e }# P/ m% n3 p+ x. I' G) [+ E
cout<<"网卡MAC地址:";
9 \! {, k: `: \0 X& A# B' ?0 m for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
" ~$ m4 N7 x3 m; ? if (i < pIpAdapterInfo->AddressLength-1)# W7 \2 F4 C7 `/ I7 s% Y& e; b9 M4 O
{" l3 E# j; @' X- T1 O; W+ e
printf("%02X-", pIpAdapterInfo->Address);3 ?7 y6 U" p- \7 ^6 U) J }" g, p
}
) m* v% L( `0 V" k; z else& |. F+ l- g9 U$ T
{( M1 b# [9 y5 b" U m2 ^; |
printf("%02X\n", pIpAdapterInfo->Address);/ J% j/ p, g; ?
}
; f0 B& }2 u3 N( U5 a/ l cout<<"网卡IP地址如下:"<<endl;
3 c7 d7 l, N, C0 I5 `" V% { //可能网卡有多IP,因此通过循环去判断7 g( R) z1 g7 e) {. ~; Q5 J: p
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
6 z* g) z5 E6 l* k# j: j do" b+ s! `9 B% z5 k/ N5 ~) |3 v
{0 {( l# W4 k2 M `# m/ \ H4 l
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl; K* [' u `) L3 W+ c
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
! {# K1 u- b0 f4 W# ?7 ] cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;' U" Z: @3 g+ }( ~: N
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;9 Y Z) e$ ?5 G
pIpAddrString=pIpAddrString->Next;( I: ^1 f+ a0 c9 f
} while (pIpAddrString);
6 q4 J) O8 v8 R) B7 i: O pIpAdapterInfo = pIpAdapterInfo->Next;
, A D) i9 E! f cout<<"--------------------------------------------------------------------"<<endl;4 e2 e( a5 c# B. R: h) m! ~5 U
}4 a+ k7 V/ z+ I7 n- P0 S
/ i! i/ o4 p7 Y. J3 d
}
5 e5 p. a0 X. B3 L$ P+ D1 A% U; Q8 v //释放内存空间
# N+ b% D t( h! _7 Y9 u if (pIpAdapterInfo)
0 v! ?9 p, T: q* q6 y6 ~ {/ P. w0 S. M) d- T1 n/ L$ A
delete pIpAdapterInfo;
1 K' b# R# P: U" [9 A7 O }" d' R T" o' \! I" _$ |* n+ o
! u5 e% Y# L z, h
return 0;
/ O/ k6 \& J3 O}& C. y7 _* ?5 m) y
8 } z, \$ B5 x( R0 s2 b/ U% Q |
|