|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>% g9 x% ~* T+ h3 V4 U
#include <Iphlpapi.h>
1 D5 j5 d# z. Z7 v$ V#include <iostream>* T) c" k( T( v
using namespace std;
( ^" z0 V% H1 a9 A- H1 y! i#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
. t2 U1 ?/ v% N/ o2 P. W
! b7 L' ^9 K& k% L$ Q. k3 O/ sint main(int argc, char* argv[])/ u; t; Z3 D- G6 r) s
{
, r0 b5 h9 n: J8 H \ d //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
. a, d+ [6 q) t' g) q; R PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
8 g6 Q0 `( P3 k6 H5 a //得到结构体大小,用于GetAdaptersInfo参数
( ~/ ]& y7 z2 }$ F unsigned long stSize = sizeof(IP_ADAPTER_INFO);+ F0 w2 H2 H2 f0 p; B% Q% S/ z
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
3 Y: K0 K# P } int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
' h1 J, `+ c5 U5 J% ] N0 l" ^ //记录网卡数量
$ C* v' S' C! v( l: n, g3 g int neTCardNum = 0;+ A W" | x' r& V! H
//记录每张网卡上的IP地址数量" m9 y+ ] E5 m
int IPnumPerNetCard = 0;6 u1 J( R: {, j, d, h+ M3 W$ j
if (ERROR_BUFFER_OVERFLOW == nRel)
9 N0 }8 {7 C% u: w! U {
$ \. C( n- C, G$ S% v2 Z4 M) h //如果函数返回的是ERROR_BUFFER_OVERFLOW
6 V1 |2 r3 g* m3 r, ^; X" y //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小7 ^/ ^( W/ f- u4 Z
//这也是说明为什么stSize既是一个输入量也是一个输出量
# V& R! L" t4 y6 a0 Z! Q( Q //释放原来的内存空间4 K: z% {% L) q: R
delete pIpAdapterInfo;3 `9 r% ~! [2 H0 W4 y9 s
//重新申请内存空间用来存储所有网卡信息
8 ?4 c9 H( e' Y3 E; s) k pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];1 T2 X+ m# P5 k1 n+ F
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量+ x5 \% g" m5 D# j* Z- H& c, Y0 g( U
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 1 v: F, v. ?! p% O2 q; u0 N' M
}4 @' _( f, ^! l1 v8 E- N
if (ERROR_SUCCESS == nRel)( w8 b1 P: U$ H
{
* a0 u5 K0 h$ M8 A" {3 } //输出网卡信息4 P S- E0 H7 l6 K* k; c
//可能有多网卡,因此通过循环去判断. l9 V0 w" B" x; ]' m
while (pIpAdapterInfo)
/ |& `7 p/ h( w; w/ i& @) { {) }+ M" C0 L# W/ z" E( _
cout<<"网卡数量:"<<++netCardNum<<endl;5 U3 F1 P* s6 p: \
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
. v! P3 p8 c( I5 ^ cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
3 r# s9 q4 f( {, ^ switch(pIpAdapterInfo->Type)
( |' a) y2 n( G$ R {2 F/ M J2 v7 V. d
case MIB_IF_TYPE_OTHER:( ?& q! M n* [1 K6 Y& x) n
cout<<"网卡类型:"<<"OTHER"<<endl;
8 L! F5 k* Z" C1 c break;
W7 ~- e6 N- d* k+ L case MIB_IF_TYPE_ETHERNET:
) a0 Y; V ~+ S% [1 J+ {9 ^ cout<<"网卡类型:"<<"ETHERNET"<<endl;6 f+ @4 j! w* u* ~! m2 C
break;
2 T1 W6 r6 ]& L" `/ g K case MIB_IF_TYPE_TOKENRING:! [; p5 O, F G, y
cout<<"网卡类型:"<<"TOKENRING"<<endl;
7 M' V$ h: p0 V& A break;. K2 w; e8 M0 Q" L6 r0 \
case MIB_IF_TYPE_FDDI:7 Q% q" o. {5 t, n' W( [$ n
cout<<"网卡类型:"<<"FDDI"<<endl;, Q4 Z" f R2 Q; T% \2 w9 W) y
break;3 u0 N: `$ d0 f: \0 V4 \
case MIB_IF_TYPE_PPP: t9 d0 h( o/ \
printf("PP\n");
) U6 Z4 b2 p# U# C cout<<"网卡类型:"<<"PPP"<<endl;& j+ {/ E P: l K
break;
/ n0 Z. ^8 R2 a8 e/ M case MIB_IF_TYPE_LOOPBACK:
# m5 D6 `: D4 Y4 x* [% m- l cout<<"网卡类型:"<<"LOOPBACK"<<endl;
$ W. V2 M( x5 l ^ break;3 _+ v. Y) I% J- m. C* P/ I
case MIB_IF_TYPE_SLIP:
) w3 {8 \% W; i; o cout<<"网卡类型:"<<"SLIP"<<endl;
2 ?1 H/ }1 b0 \' p break;
, }; x$ a$ P8 \. j. Y2 N9 @ default:
: K2 w Y# u4 ?! O& f- w: r, B
4 V! X" G3 d( Q5 \# a) @( _' |) M break;
+ S' u% l# X5 d" R) J/ C0 c! r }! A4 z9 e- r8 ~* \# b/ D9 T; Q& l: \
cout<<"网卡MAC地址:";! D# N, \) p2 i+ H
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)3 q& b U+ U! Y. E7 ?8 m/ V. _( ^
if (i < pIpAdapterInfo->AddressLength-1)0 L1 U6 @! R$ f2 d
{4 z# e. t6 g6 Z- b5 r2 V7 Q
printf("%02X-", pIpAdapterInfo->Address);
4 }9 m5 @& Z. X& ?2 {$ q2 J# ? }; H* y2 R+ I: E$ U7 K% @; d/ N
else1 J, g! y! t) |# X1 K
{
/ }7 q0 q) C6 r3 w) U printf("%02X\n", pIpAdapterInfo->Address);
8 ?3 ~; @ d s }
# J- x, a) ~) ^: M! @ cout<<"网卡IP地址如下:"<<endl;
* V( G* R, d t7 g" f4 n, S. R6 m" Y //可能网卡有多IP,因此通过循环去判断5 n& U+ S, T& ?7 p) J
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);/ }7 M$ s' s7 | E6 V; B
do) \4 K6 _6 w4 q% }* l) l) ?0 q! a
{
$ K9 r; I. L; v1 Y cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;2 ^+ ^6 d5 N) m0 U
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;6 H$ F4 d* j* D6 s" C2 `$ _
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
! U, w+ z+ Y$ [% c9 x: b" e9 H( `0 D cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;: I5 }# H- K) ?; f# e& ^& ~! q
pIpAddrString=pIpAddrString->Next;
# q& W, C* |% }0 f } while (pIpAddrString);2 u* B7 {9 V3 E
pIpAdapterInfo = pIpAdapterInfo->Next;$ c2 y# j6 O% Q M! w0 m4 V) O, T( ?
cout<<"--------------------------------------------------------------------"<<endl;1 G5 P* \0 n& E7 _
}, _1 k# U; o, T
6 F3 c) _- e6 ^9 e4 v o. z5 w6 E) s
}6 h9 O6 ~0 Q; c# Y! o* L0 [
//释放内存空间9 ?3 C+ e- y1 ^ n$ c
if (pIpAdapterInfo)
' i/ f% j4 z' H4 a5 Y. i$ L {2 u( |; k" v7 J Q u2 [
delete pIpAdapterInfo;
( ]9 ^) N9 l# l0 ?2 ?6 N }
( `9 @8 a. r+ A- Z' s9 p 8 m( |, {( @4 A! s6 v
return 0;6 u4 q2 I2 d( w- Z% ~( A
}
% R* m( f1 n3 Y. g7 }& p2 v# c( P! [
|
|