|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>4 ^, A3 @/ @* ^0 z! x
#include <Iphlpapi.h># e5 e- U7 _9 q
#include <iostream>
* u5 S# }/ s7 n" H$ O% z. }- ]; [using namespace std;) r/ q. K6 e+ U8 y
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
* }9 b' m5 D4 T5 l. L6 [$ C7 r( s' X" e4 e7 A3 x5 n9 H
int main(int argc, char* argv[])( ?- q, t4 L8 D
{
1 b0 t/ K: `9 x: D% k+ E$ y5 | //PIP_ADAPTER_INFO结构体指针存储本机网卡信息/ e7 r4 F, s0 J. H, D
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();( q+ @6 q8 p* ~% Y: c
//得到结构体大小,用于GetAdaptersInfo参数1 q3 b+ G' L7 F5 D; K
unsigned long stSize = sizeof(IP_ADAPTER_INFO);( p/ i# B0 |4 K; J
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
0 T; q5 Z' Z/ s( `4 [- t" N int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);8 \8 a+ p! K( u8 A" ?
//记录网卡数量% V) d _3 |" F% ~# n' c" e
int neTCardNum = 0;- ^0 C1 G; c3 U
//记录每张网卡上的IP地址数量% J9 v6 E+ X! ?+ M$ ?7 x
int IPnumPerNetCard = 0;, E) K$ ?. z1 A X5 V& c
if (ERROR_BUFFER_OVERFLOW == nRel)1 E, u4 { w' C* o: k& v! n2 R
{; Q3 }% j; A5 b3 z4 a3 F
//如果函数返回的是ERROR_BUFFER_OVERFLOW
1 Z1 e7 O+ i9 Q) x7 a //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小% C g% {4 X8 f6 S9 ]
//这也是说明为什么stSize既是一个输入量也是一个输出量+ h9 }) E* d7 `4 Y. f
//释放原来的内存空间( Y) [: d$ A- `0 Z2 s
delete pIpAdapterInfo;
, S1 M, l3 P) ?, A3 i- r1 u //重新申请内存空间用来存储所有网卡信息3 r# n1 J) S* R5 X
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
- j' x& F1 ?! E" Y //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
2 j7 n" L9 U+ t2 K7 O7 `6 O# ? nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); ) L6 P) a4 \8 D, Q$ t- M8 M' o
}
9 O j: P6 }( w- O; O3 H" x if (ERROR_SUCCESS == nRel)
7 F( I1 k9 K% @4 [# c {
" f4 |# D/ w. k3 q7 w //输出网卡信息/ k5 R* l- c( m6 w
//可能有多网卡,因此通过循环去判断% n; O$ ^/ m: V& E2 ^
while (pIpAdapterInfo)
7 x. B# n/ G8 P- f- l {( V, D5 z/ \# _/ _1 ~) e& L: K9 R
cout<<"网卡数量:"<<++netCardNum<<endl;9 X9 }! e. ` H1 S: \
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;9 c w4 R8 U7 W' t; O
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
- m9 o) d% a8 S switch(pIpAdapterInfo->Type)1 N$ X5 c, b$ |; n) a* q- ?5 l/ i a
{$ u* R$ P2 @0 Y4 H
case MIB_IF_TYPE_OTHER:
' a a) Y3 m3 o# J) T- j cout<<"网卡类型:"<<"OTHER"<<endl;
4 V2 T/ I# L8 z# L* F k- d break;, v7 @2 _ g% v& M5 n4 Z; e
case MIB_IF_TYPE_ETHERNET:$ Q# M$ U/ E$ M, x. Q% y
cout<<"网卡类型:"<<"ETHERNET"<<endl;
7 G5 u8 p8 N, F break;# l. Y6 Q3 C! W! P6 r
case MIB_IF_TYPE_TOKENRING:
5 b( { r1 L+ _' C cout<<"网卡类型:"<<"TOKENRING"<<endl;1 {9 A+ N0 k9 F6 q" T
break;. [. g# k s. n9 o
case MIB_IF_TYPE_FDDI:, d; I$ @" @7 M( [8 z, I- u$ f
cout<<"网卡类型:"<<"FDDI"<<endl;' L9 u& o; X5 }, n2 D. n) r R
break;
2 d9 S* S$ b9 ~2 T case MIB_IF_TYPE_PPP:
* c* z, y/ b5 r/ S% ^% B printf("PP\n");8 w' u9 r, e# d% I: [
cout<<"网卡类型:"<<"PPP"<<endl;! m5 w- P+ w \! ~1 u, b( @
break;
' [: I( Q: K- _) ?8 b/ z case MIB_IF_TYPE_LOOPBACK:
) D; ?2 a1 f) q2 V% v: Z. U2 o$ V& O cout<<"网卡类型:"<<"LOOPBACK"<<endl;/ N! k$ T* e+ D9 |2 }
break;
2 D3 c5 L0 E& \( ` case MIB_IF_TYPE_SLIP:! W9 {3 ]0 y- M* p& J
cout<<"网卡类型:"<<"SLIP"<<endl;
6 S% p F0 {! A# }* c) g break;
% v" _ ?( q+ n [ default:
/ l; \' H7 {% ~7 c' V, Q( `$ G6 W8 A* v! U' ]
break;$ k: J% ?2 [3 J" g5 V6 N: D) {7 U
}/ N& U& j4 s4 u* {! }% s8 c
cout<<"网卡MAC地址:";5 }. Z6 V; ^0 A1 R8 K
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)' d4 S2 g4 b! C+ e
if (i < pIpAdapterInfo->AddressLength-1)$ ]1 }- G- A5 j0 d
{
9 l6 k q. o) p) Q' f printf("%02X-", pIpAdapterInfo->Address);7 E# K; ^, [4 a$ w, z0 U
}0 b0 J( U1 | W' d( A
else
( x; z& _7 e3 b8 ]: N# J {
' u8 ~% B) X( z! P9 m' _& E printf("%02X\n", pIpAdapterInfo->Address);
0 N( c' |0 n6 y* u- {! | }
. h* l4 y9 B9 f2 I9 v) T5 M cout<<"网卡IP地址如下:"<<endl;
a$ ^! N7 `9 X3 L9 T. _: Z, z9 e //可能网卡有多IP,因此通过循环去判断, a) |. M# x6 `' L) m
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 V4 z4 l* I S D2 f/ {$ l5 a do3 N+ `8 D. \; m# m! X. T5 }5 J: I/ u
{
$ t* d' b; h N6 P$ j cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
. Z$ a: b6 x8 G H cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;$ x/ e* L6 Y( B6 B# i: q+ W
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;, w% c4 W4 J; b% E* | [
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;# V& i, D( K2 r9 L4 L7 Q
pIpAddrString=pIpAddrString->Next;
5 F K9 d) S% O& b& t% w } while (pIpAddrString);' x/ ]0 h- o* A4 ^. V7 `2 P
pIpAdapterInfo = pIpAdapterInfo->Next;
6 H; E! b2 o, y/ X; m' M: x cout<<"--------------------------------------------------------------------"<<endl;, @& @ m0 j0 |, K
}" e) C( q# Y# k5 v4 ^6 @
1 }) a+ s% n! F4 e }
0 z( A5 g }* s C! E6 u/ L //释放内存空间
' y* S9 A: f8 ~9 t( [3 h if (pIpAdapterInfo)
3 J# Q5 O, W& a" w' a {
( P( p6 m8 s. W" J2 C3 L delete pIpAdapterInfo;, y: b9 ^3 z$ W$ R4 x. |" v
}
5 J v, }& o; b+ \' f
7 I& s! r3 C0 i% d& [, Z: } return 0;' z" b2 C; L6 E- b$ |
}
& Z/ e/ r; \% x- G) d$ Y. v0 H/ O' \2 f. Q! ?
|
|