|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>7 e( ~3 K: H, _1 G. `3 P: r
#include <Iphlpapi.h>+ ]$ ^( r, L+ M h6 w- ~
#include <iostream>
2 A$ J1 y& m# V" F+ j5 V% Zusing namespace std;
d0 M0 w$ u7 P9 g7 L#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库7 I4 D6 w2 \, s! ^! O
& k( L1 }* R& |' u' L Cint main(int argc, char* argv[])
) ]1 N; S) N7 \{
$ ^) P* ?$ H$ c* D" j //PIP_ADAPTER_INFO结构体指针存储本机网卡信息( Z- h' F" s& h# v6 {
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();" N# N% ]6 S/ g5 e) e
//得到结构体大小,用于GetAdaptersInfo参数
% _6 q5 y5 w8 O7 r unsigned long stSize = sizeof(IP_ADAPTER_INFO);
( T6 O, J8 D& P4 t+ l8 U //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量6 n5 k4 L7 r) b
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);: Z3 k1 @4 Q3 R# z
//记录网卡数量
- D) \7 x3 F. n# G4 b1 ~ int neTCardNum = 0;# V; C3 B5 g7 X' ~
//记录每张网卡上的IP地址数量
0 T# Y9 A( [+ R- _8 b3 ^$ h1 D int IPnumPerNetCard = 0;/ H8 g6 {- E1 x5 x% w7 q
if (ERROR_BUFFER_OVERFLOW == nRel)
- |$ @) B9 E ?2 S( J; W) ^ h {
1 O# H' M4 Y+ I8 A" m //如果函数返回的是ERROR_BUFFER_OVERFLOW
) b; G, `4 w6 p+ a2 ]& Y, a: M //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
# h5 c" |8 _& J1 o //这也是说明为什么stSize既是一个输入量也是一个输出量, e. h8 ^) \ }
//释放原来的内存空间
# _/ f0 n- D+ |0 ~1 P1 j delete pIpAdapterInfo;1 O c; P) a! c! [
//重新申请内存空间用来存储所有网卡信息
; \: m/ W# G" } pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
2 `4 F2 r2 [0 \8 |. U //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量! @2 z9 }* {: P [; s
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); & Q- B2 @& }' ]% U' y: a
}' I. a# g0 R+ g( b, B" }( F, X/ m U
if (ERROR_SUCCESS == nRel)
0 T/ K, `* q/ G+ o {
) J6 v! ~6 l& p //输出网卡信息
! y0 K9 l" R* Q' W" ]: b) G& a% i //可能有多网卡,因此通过循环去判断
8 ]1 P! }/ N- r while (pIpAdapterInfo): ], F5 g: L' `8 a4 \! P. ^
{% L. f: C( o% j! }. q" w
cout<<"网卡数量:"<<++netCardNum<<endl;
4 h* f5 B- e8 k. h! ]2 u9 [: v" A cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;/ N4 p- _' [: T( L0 j Z. X
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;3 O4 @4 c3 ~. g+ k( M
switch(pIpAdapterInfo->Type)/ f3 d1 K4 M5 o" O
{! K0 i6 K8 M7 h, X# o
case MIB_IF_TYPE_OTHER:8 L) y% ^6 |, Z3 d6 [5 {) a
cout<<"网卡类型:"<<"OTHER"<<endl;( I% [# k9 [$ }: j. O4 w) B6 U. Z
break;. i! c8 f9 t7 B
case MIB_IF_TYPE_ETHERNET:* x8 K1 c# x; C, ~( V' n, K7 h
cout<<"网卡类型:"<<"ETHERNET"<<endl;' G- c' O2 a. Q3 u4 H
break;
4 W4 x. F4 g4 M3 I$ [& \+ h. ~ case MIB_IF_TYPE_TOKENRING:8 |& l/ m/ w* L& W0 {, Q
cout<<"网卡类型:"<<"TOKENRING"<<endl;1 |" h6 C7 ?6 ^9 s! h( v. {
break;- C% g3 s# |$ v7 [! W
case MIB_IF_TYPE_FDDI:0 Y& w- u3 h! p g) b8 W
cout<<"网卡类型:"<<"FDDI"<<endl;; V M& s' t+ E- N! H0 e$ {) G
break;
" b, I/ Q2 z' T" y# j, I* U case MIB_IF_TYPE_PPP:# O6 |! f/ Z; p8 O
printf("PP\n");
& C! {3 j8 f1 _4 i. R cout<<"网卡类型:"<<"PPP"<<endl;
0 t3 U7 q- c5 j, ~4 Z break;: t6 \/ C4 n8 G) Z( ^$ U
case MIB_IF_TYPE_LOOPBACK: W$ S {8 P3 u* I4 W
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
- ~3 ]- ~, P5 _: L. n break;
# |, @' {, n" t( x/ [* X0 p) h) h case MIB_IF_TYPE_SLIP:
' ? d- C0 l& k cout<<"网卡类型:"<<"SLIP"<<endl;
2 M* [2 L8 E7 x6 _ break;
2 r% ~" z: X9 j& m% u9 g default:6 `5 X2 P; c- A9 Z \
7 ` e: s$ j4 X( ` break;( h% Z, ~, s( l9 F( K* {
}" S+ Q' E2 m, j, O3 D' j4 k
cout<<"网卡MAC地址:";7 d1 a1 Z9 I5 @, B; v: Q7 {5 _
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)) B ]/ O; F$ z1 w# l- l+ z- |0 f
if (i < pIpAdapterInfo->AddressLength-1)0 K8 H# l" @1 d W
{
1 I* X {+ [7 s2 ~7 ?5 S% a printf("%02X-", pIpAdapterInfo->Address);# M+ U8 E8 `5 R2 x
}
, M: w5 r. w% Y8 B5 i else( ^* U U; Q% Y' l( T2 z# q3 {, [
{2 Z! b7 [0 j& l( p7 O l
printf("%02X\n", pIpAdapterInfo->Address);3 @! n1 d+ c/ J6 R+ Q/ @
}
1 {( g! o' e) t# ]4 D! Y' w2 c% E cout<<"网卡IP地址如下:"<<endl;
4 g* I) Q0 z) M5 o I0 R //可能网卡有多IP,因此通过循环去判断
) o |3 k" e6 {" m8 }; V. b" N IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
" J$ N' f6 y% a4 t do' X* g' ?9 x5 ~3 a: f/ O3 i; ]
{
) P! S6 Y+ x* o) X! } cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
1 T6 C6 M6 \: v4 I$ j4 ^5 s cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
% d+ T* }/ j, p) b4 j' y8 Y cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
" K& ~- d" ?3 C7 {9 W B cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;: F. n: W8 S/ r) N5 F
pIpAddrString=pIpAddrString->Next;! s% U! ~7 m a0 M9 g8 y1 L
} while (pIpAddrString);+ N! H/ { E& z: Y1 Z+ Q
pIpAdapterInfo = pIpAdapterInfo->Next;
8 K( m2 r f' c" h/ C' f! P$ b% k cout<<"--------------------------------------------------------------------"<<endl;
. B5 |6 N( r& ~8 y }) i9 P$ z# D, k* u+ P. `6 |5 P
! S2 \. H* @/ e2 @( i' c* {8 u/ D t
}' c& K1 y6 k9 J$ i
//释放内存空间
" a) S5 s4 F5 t if (pIpAdapterInfo)
/ O, G. `2 `3 y& K, u+ x {
/ A7 c8 v% F; c8 q) ?6 q delete pIpAdapterInfo;
/ [# h' F9 R9 l2 y }% t% ]* y2 P# W2 e/ Z0 \; W/ r3 d
; z; \- W% x1 L
return 0;
5 z4 d/ p$ u$ Q A# D; |& [}+ u7 ^9 Z0 @8 a; X, m
7 ^. a. K, j" u6 v$ N3 O$ ^
|
|