|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>0 z$ {; z: Q6 G+ A( @/ `. F
#include <Iphlpapi.h>& X0 @+ y3 j+ P) L0 y- L$ v* ]; A& B
#include <iostream>. y) S/ i( k5 c8 V
using namespace std;7 y9 A. T5 a, ^; I- m
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库 ~. y) c" z7 T3 S }5 e
2 p' g0 B% d8 B, Lint main(int argc, char* argv[])9 {' n! O' `, Q* k2 N, n
{# O' `3 `3 H+ K$ Y7 G
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
4 c/ [7 I- d8 ^: `% ]+ E PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
3 s! V% N; t* ?8 s2 H* ?- ~! X //得到结构体大小,用于GetAdaptersInfo参数6 A2 I+ n; C: t( |4 b$ a. o8 W
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
2 S) T9 \0 p3 Z3 Y- M/ e( c //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量4 L- D) w2 p: g& M- X: }
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
O3 f' Y% }) @0 C //记录网卡数量" |! m3 D9 M s8 [
int neTCardNum = 0;1 |+ |+ U/ }" \$ W W
//记录每张网卡上的IP地址数量
" I1 ?, i& z, f int IPnumPerNetCard = 0;
& W( t0 q. G- t1 s if (ERROR_BUFFER_OVERFLOW == nRel) E1 b3 v4 j& P! ~5 l
{; \4 ]" ^" T; k4 j, r) i
//如果函数返回的是ERROR_BUFFER_OVERFLOW
# ^/ c4 w% Y" U1 T //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
/ u3 D3 q' i6 I //这也是说明为什么stSize既是一个输入量也是一个输出量
2 I% O# e6 ~' z //释放原来的内存空间0 l5 E; |% \) Z9 k
delete pIpAdapterInfo;. H5 }! V3 P( h" p. T+ A' ~
//重新申请内存空间用来存储所有网卡信息7 C* f2 F4 ^4 K$ K; d4 L y
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];$ T; |' W! l' u% L9 `% q
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
1 T$ F3 A; `5 \ nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); / @8 v8 P6 {+ E: o, I3 S
}
; _1 n, c) q p- v9 S. v' J if (ERROR_SUCCESS == nRel)
, z8 @2 d: ^* ?1 o3 H {( t3 I. k9 W9 C# O h) |. Q1 p, v1 C
//输出网卡信息
2 b$ f! W5 Q( S$ e8 n //可能有多网卡,因此通过循环去判断" D$ E( f5 `7 T, ~) q; Y) m+ H& O
while (pIpAdapterInfo)9 Y- r, M" L/ W3 P
{4 M7 D# r0 k" R% g# u8 c2 d
cout<<"网卡数量:"<<++netCardNum<<endl;
. r! g) p W! l+ H cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
% L/ @7 H( c. j+ ~3 q4 t" b7 G cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;7 x' x% g" G4 d6 c# H. t# {
switch(pIpAdapterInfo->Type)1 R M+ i' C K7 b1 _( O
{
) S3 H8 ^6 o: L case MIB_IF_TYPE_OTHER:2 k5 |& _3 t3 C4 P9 `/ t
cout<<"网卡类型:"<<"OTHER"<<endl;4 M& ]1 T4 o: C0 Z
break;
- x3 B' y: j- H) _) p case MIB_IF_TYPE_ETHERNET:
) E* s" t( `- m2 ?/ z cout<<"网卡类型:"<<"ETHERNET"<<endl;
8 q$ c; ?' _! ?7 F break;
; U( v2 L, j" a, h1 u% G( {- R4 @" t case MIB_IF_TYPE_TOKENRING:
3 R- E7 r/ K- W! D$ d- ? cout<<"网卡类型:"<<"TOKENRING"<<endl;2 J8 r [, ?& O+ m
break;: [2 d$ J4 \0 B2 J9 P$ P
case MIB_IF_TYPE_FDDI:
& \2 J7 n& e/ ?1 `; m cout<<"网卡类型:"<<"FDDI"<<endl;% x5 E0 P8 z1 I* k: F: n( |; Q! Z$ x
break;
! Y& I( r4 m7 ~# r4 {9 k7 E case MIB_IF_TYPE_PPP:
2 \: x J$ ~. C printf("PP\n");
! V+ O0 G3 v% o5 A9 Q cout<<"网卡类型:"<<"PPP"<<endl;: y/ J- o1 U( [; `
break;
; t" S5 w$ j1 h _/ z0 W( K case MIB_IF_TYPE_LOOPBACK:
' E4 f3 Y8 c0 o2 b4 n! h0 e cout<<"网卡类型:"<<"LOOPBACK"<<endl;
/ ]- H$ b) C, o break;
- K" b' T6 r9 W# Z case MIB_IF_TYPE_SLIP:0 I6 P' Z% n1 @- |" a
cout<<"网卡类型:"<<"SLIP"<<endl; E8 J9 ^ T' e' w4 o+ D0 M5 h. L* M1 h
break;
# y& Z" T6 @# V( x# Y default:
3 }; v, w: \/ I& @! S8 }. Q3 X4 `$ @
break;* l$ V5 e2 S+ ^3 J. Z, l0 }
}
k+ I0 {4 i! M: I cout<<"网卡MAC地址:";5 d) Q6 t( Y% a7 K
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
y% C7 l n0 |! r$ R" K if (i < pIpAdapterInfo->AddressLength-1)
6 M* z) f/ o% v# X$ X7 b; v {
, D% P9 \$ u" \& k7 N9 z printf("%02X-", pIpAdapterInfo->Address);
4 n9 Y8 @4 F, |$ c$ U }
, F- f& D7 {$ h- m$ P; S/ X else6 ^' r, c* A! z5 e
{
1 ?* U' }& P" l; J( M printf("%02X\n", pIpAdapterInfo->Address);
$ H. I$ E5 ^! \7 y1 P* Y }- v$ @* C: z" n# d, ]" P
cout<<"网卡IP地址如下:"<<endl;6 p/ W* X3 r% G/ O
//可能网卡有多IP,因此通过循环去判断( [/ C3 W3 W/ z7 A* O" s5 ]# _
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);' A" e$ t. ?" X! h1 P# A! f. s6 ~
do
! a a) c; U3 r, d, X. k {
4 m5 Y5 L0 l) t; L8 h1 q; m) s cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
+ Z, M$ L' @( g cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;$ z5 X* ^6 V/ Y* `# G+ J7 l) u4 I
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
3 B/ q T, O9 [ cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
' u" w& I. ]' K& D7 i; f7 R pIpAddrString=pIpAddrString->Next;
v9 y Q8 |' c& @ } while (pIpAddrString);( f7 k2 p9 B9 g) Q) ^0 n
pIpAdapterInfo = pIpAdapterInfo->Next;$ p. L$ c4 c# o2 d! _
cout<<"--------------------------------------------------------------------"<<endl;
$ x) Q2 \/ S+ L% `1 o }6 L- }* _7 ]; b9 y5 d( h
H) m, C) q @2 u a; L: y V }
7 Y7 g, o: K8 j //释放内存空间
- i6 V3 O# c) i/ Z3 U- K% [ if (pIpAdapterInfo)9 k% {9 W/ ]: P4 P% i8 n
{* g& }* \0 \0 R) y4 C1 P
delete pIpAdapterInfo; f' U6 v0 c7 I
}' k" ^ | \" l+ q/ Q
2 M; I+ h* T% @
return 0;) w6 { o' }' M, J; g
}
. U' M W5 N L& W
0 a$ W k7 R% o; q2 F |
|