|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
#include <WinSock2.h>
) ]) N* x$ R( ^#include <Iphlpapi.h>" a+ E; o' ]( o
#include <iostream>, c2 I. r4 q' i; t( E& l
using namespace std;+ c. S; a# K. r/ R0 q W- \- _
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库, e# D4 f5 v0 |& F, a3 W( `
" n/ }9 T5 s' {& ?' s$ j: X" aint main(int argc, char* argv[])
2 C) e# C& y; m2 }, x6 p+ |{" N( i8 G1 ?/ C+ j- H2 R
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息0 z+ V7 f8 R- |' A. J0 f3 R8 p
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();3 e/ R. E3 {) \3 H0 @1 G
//得到结构体大小,用于GetAdaptersInfo参数1 H& ?6 h( Y. x( K( A) t, A
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
* e' w `6 j. d g6 a# D/ M* X6 R //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量; q6 a# k7 J* G' I0 s
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);$ H, x5 ]3 s# w: D& [+ l
//记录网卡数量2 g( H5 R. \' `- ~1 I4 H
int neTCardNum = 0;$ ?2 _& j% L" w, f- ?8 E! Y/ n
//记录每张网卡上的IP地址数量
6 ?' X( b) H3 b& T3 ~7 D int IPnumPerNetCard = 0;) _, ?. H/ y/ J& O
if (ERROR_BUFFER_OVERFLOW == nRel)& H; Q+ a2 u; P5 w( `7 @6 t3 b" n
{
5 ]; X) @; w; b+ _/ k ^( d; _ //如果函数返回的是ERROR_BUFFER_OVERFLOW9 l1 f% \' E9 D$ ?: f& N
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
3 j% c. B e6 w' ~1 f1 X //这也是说明为什么stSize既是一个输入量也是一个输出量# v( r2 r9 v- z2 T
//释放原来的内存空间6 l+ B8 \& c' { l
delete pIpAdapterInfo;
- k+ z* ~* m% d) H //重新申请内存空间用来存储所有网卡信息
. Y: s! E; ~1 K# a3 I6 L& ]' g pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];6 ^, @& p6 S( }% {; s4 I5 p& H
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
+ {! B+ R+ T: w( r3 D/ T, {' W nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
( Q2 O( _: |" l+ t( i, a2 B }
/ O g/ _- S) \' R if (ERROR_SUCCESS == nRel)
# y6 i; l, N5 b' L1 f {0 v, |) V8 y+ }1 J1 H
//输出网卡信息
2 U: k9 G. f6 b% o //可能有多网卡,因此通过循环去判断
: c) E" T) Z/ N: e: e7 X4 f while (pIpAdapterInfo)* y" a3 W) b6 ^5 \$ G0 b
{& ^4 G' x( V& Q
cout<<"网卡数量:"<<++netCardNum<<endl;
7 M J: M7 U4 P9 c2 H% U& }* c cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;) f: u- C0 H/ o1 E. Y
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;! l0 Q( }. L; o# p4 a
switch(pIpAdapterInfo->Type)0 G" ?# a7 [" C: D. h3 J# m
{
: Y! h) N% E- E0 w6 Z1 @2 e2 ^3 O case MIB_IF_TYPE_OTHER: O6 f7 o& H' u. D# R, R
cout<<"网卡类型:"<<"OTHER"<<endl;
. _* F1 x- y* w break;
, n: J+ }7 }$ n7 Q, O8 d case MIB_IF_TYPE_ETHERNET:
, N( {# z5 t3 { W# j/ G8 n9 L cout<<"网卡类型:"<<"ETHERNET"<<endl;* U/ k* J0 e2 V' L; r. O( y
break;
5 ~* S; ?3 z6 E( q' e/ ^ W& d7 r case MIB_IF_TYPE_TOKENRING:
$ y: o, y) E5 x. `4 ~3 J9 c* }* W D7 Z cout<<"网卡类型:"<<"TOKENRING"<<endl;
0 c2 K7 G( X0 e break;. z7 D% @: e! z: o
case MIB_IF_TYPE_FDDI:0 B4 h) I# [$ C
cout<<"网卡类型:"<<"FDDI"<<endl;
! }. X0 P% T" }0 Z9 [; ` break;% ]* h; A: r5 y$ V3 m
case MIB_IF_TYPE_PPP:: Q* Y$ `, d) L% ?: F; l; B
printf("PP\n");, Z- p8 c. S2 D: F, i- r( m8 B- N4 [+ t
cout<<"网卡类型:"<<"PPP"<<endl;& Y+ A' F$ k1 L: m( w/ e- l
break;% r8 i, {' j3 i3 E' A* p
case MIB_IF_TYPE_LOOPBACK:* S3 m4 K4 s7 _! t$ Q
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
9 n8 N$ ^6 v$ v break;7 z" \0 x. y' _( B- F
case MIB_IF_TYPE_SLIP:. j, T% J S( \" Y, u* m+ H& m, ~
cout<<"网卡类型:"<<"SLIP"<<endl;( y9 e0 S! }, _# k- N6 c6 {
break;
; H2 t6 b1 g: A6 f6 }/ z& M default:, G) e% D: g( @& [8 O
) Y( @& W$ D: b6 o
break;; t0 ?, A+ h* H8 o7 _( Y2 w) \4 V+ a
}
- |4 l& K- u6 P7 ?% S5 m cout<<"网卡MAC地址:";+ g3 A; f3 n! A
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
+ A8 g. Z0 {6 R0 o) t- b if (i < pIpAdapterInfo->AddressLength-1)
6 H& ~ [ G9 N& l7 E/ j' V {
6 w# P0 W5 M& t2 j' b' k printf("%02X-", pIpAdapterInfo->Address);3 o7 C/ f2 s6 ~7 T
}
+ n8 V# w" j6 ? else" L4 S/ \3 }" z) U+ O
{
+ K/ Y1 p1 }- b: ] J9 v) P8 o printf("%02X\n", pIpAdapterInfo->Address);
% c0 @) O6 S1 r/ a }
1 C/ _ b7 X2 o+ n9 m5 C5 N+ K cout<<"网卡IP地址如下:"<<endl;
; F& X2 W' F; W! a //可能网卡有多IP,因此通过循环去判断
; I/ e, m3 Q, _5 D* M IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);6 Z- h- m3 A; L# Z
do
! G, h9 i4 I, X2 M* T9 i {
; o9 h" G) M9 d H. } cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;; N: |: n3 H, ~9 r* }/ Q
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
; Q/ T; {! E4 v" p, C cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
! k% I. ]& U4 M5 Z$ |& j1 A cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
! K+ i$ X+ F4 }/ k. ~ pIpAddrString=pIpAddrString->Next;
# h* G5 P- N) s2 J6 h* A% i } while (pIpAddrString);
?- D+ w8 _6 u Z. { pIpAdapterInfo = pIpAdapterInfo->Next;' x1 ?5 M& ~/ \% a" \. u
cout<<"--------------------------------------------------------------------"<<endl;6 V4 ~, |5 D' k; x. z3 ]7 x
}
4 O o: y' W) K9 g
# w M4 @* y4 o, L$ z# o }
0 i! ]1 ], B! b: T( v$ u# V //释放内存空间( w/ w, r6 C% _ P
if (pIpAdapterInfo)3 ]& |9 g' D4 `+ k9 I% _/ L
{0 R/ Q) H8 s" L! {0 E
delete pIpAdapterInfo;
- s3 o) ]& a" G/ P+ y& V/ { }
, B* }; U2 z6 e( P7 Y
& s$ `9 o; I: U return 0;; h9 A$ w* _) b, D
}
) Q- z! T6 D7 K# Z7 e8 ~ \0 u4 I* j; j; q. B8 z( [( L+ ?
|
|