|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>, b5 r% R9 ]( D( B- v( D3 z
#include <Iphlpapi.h>3 \& T9 Y* w: I$ H/ E
#include <iostream>0 s* q& P ?( Q
using namespace std;
; D2 R$ k- f: Z: l' e' {! p8 ?#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
4 t \7 P' z* p/ U% R2 ^9 y9 s
8 E, l7 H8 q4 W# E- Eint main(int argc, char* argv[])8 k# u+ |/ |9 c: R: _
{% k$ ^& X" r2 N. a& H2 U6 ]% ?" M
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息$ r& u& D7 {, k/ U/ T @4 w
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
) V8 @* Q" J$ S2 i+ [; g0 {, E$ t- t //得到结构体大小,用于GetAdaptersInfo参数
" v) b1 x$ i" e3 n unsigned long stSize = sizeof(IP_ADAPTER_INFO);% U% x5 ~# @+ P! ^1 U
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量9 y- S/ c: S% V0 o6 V+ J
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
& p% V( H4 l" i$ i# ^' g3 l- F //记录网卡数量/ w4 a! n7 l( B. ?! s
int neTCardNum = 0;$ D6 L* w& L- N
//记录每张网卡上的IP地址数量; g, X4 C3 N6 Y4 o! ~& \9 k
int IPnumPerNetCard = 0;
5 |, U# }3 N* c* G5 A6 b" f; z3 e if (ERROR_BUFFER_OVERFLOW == nRel)1 s( L) y5 I5 T
{6 g; d; j3 }% X, }6 T: [& _
//如果函数返回的是ERROR_BUFFER_OVERFLOW9 }1 x9 G6 ^3 J% I& N: V4 n
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小* l9 n+ s3 X6 v, q8 S
//这也是说明为什么stSize既是一个输入量也是一个输出量
; ]+ [, _, e/ J! l# A" T, ?4 K9 x. _0 P //释放原来的内存空间
8 F! Y a7 n$ d% v: u delete pIpAdapterInfo;& p9 E4 ^ z7 I1 Q' @
//重新申请内存空间用来存储所有网卡信息% r) a8 K: D: P5 g5 {
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];" l" _) g9 S" T6 O
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
( O* T% b) u% }) H nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
* {0 D& d( R2 c' f }( b. a) v/ e# T
if (ERROR_SUCCESS == nRel)
. v, ?( w- g+ N V% \ {0 ]: K* d4 k" f( \. p4 k
//输出网卡信息7 s1 D" v& ~% D( m
//可能有多网卡,因此通过循环去判断
# f8 i" X" }& @' k" n while (pIpAdapterInfo)) y8 X$ v6 H. t
{; _, Y6 c- E7 d+ p& c
cout<<"网卡数量:"<<++netCardNum<<endl;
1 Y% j( h$ b1 D8 W9 [ cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
: b9 Q# X* J- u0 F+ S. \8 t cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;! q+ d" k# Y; z! L. P5 L
switch(pIpAdapterInfo->Type)% Q* q! s( N7 L/ S
{, u2 F. G1 r$ Q8 p G2 L7 f
case MIB_IF_TYPE_OTHER:5 {8 U' h# v6 Y, O1 K" X
cout<<"网卡类型:"<<"OTHER"<<endl;
4 b- S: p) m* ~8 ~6 q6 D break;" i* b# r" g: N- Y" e2 o
case MIB_IF_TYPE_ETHERNET:4 g, t* S8 F5 e
cout<<"网卡类型:"<<"ETHERNET"<<endl;
6 x4 |* X% N5 P8 n- D# K break;
3 v' K& \8 m- K3 r6 B1 o. t2 @ case MIB_IF_TYPE_TOKENRING:( {( b& U% x8 Z* l6 X' |
cout<<"网卡类型:"<<"TOKENRING"<<endl;( V# }9 m5 U# l% K
break;8 |- [1 l3 y' Z- Z. N% L: q) g
case MIB_IF_TYPE_FDDI:
. J: R$ Z( n! A cout<<"网卡类型:"<<"FDDI"<<endl;8 p& D; g: Q; [! b0 m; `+ }
break;
, l2 o3 U0 b) O7 h1 k1 k0 Y case MIB_IF_TYPE_PPP:1 w l, b4 e! V
printf("PP\n");
. z b9 w$ c8 j ]3 S6 U B cout<<"网卡类型:"<<"PPP"<<endl;
' ~$ v9 z$ n( s% f break;
3 l- n# ?. @! o6 M, y case MIB_IF_TYPE_LOOPBACK:
! @2 g1 C1 k% z# c# m cout<<"网卡类型:"<<"LOOPBACK"<<endl;
9 K; d& P% n5 G- h& S break;
! b' P* R, \' a case MIB_IF_TYPE_SLIP:
! f# P! p, n, @+ |" T" C; ` cout<<"网卡类型:"<<"SLIP"<<endl;
; v8 B9 ]! E1 N: a break;
. p3 U9 }$ e; B, ?- \8 B3 m default:
! H) h7 k9 i+ X8 x7 a( ^! v d) o G8 Q7 n$ a; L) _' e
break;
, [+ A& N1 {; a! I+ Z( W7 Y }$ ]4 C8 K+ S$ E/ \4 c
cout<<"网卡MAC地址:";) V! _( O( o5 j* U' c: h1 e' P+ ]8 x) l
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
$ `$ y$ s; w8 E4 F if (i < pIpAdapterInfo->AddressLength-1)4 I9 E3 }8 t5 j, `# G
{% F1 {$ `9 s: E, j6 W
printf("%02X-", pIpAdapterInfo->Address);0 t% A3 `3 {3 d- J% }' N
}
& s: V8 b: K7 A' M8 ?. @+ C else0 X& [$ J; G! r5 D! r) p' u( s' K
{
0 P. f e: E5 @5 z7 Y( o# Y, j4 Y0 t printf("%02X\n", pIpAdapterInfo->Address);
2 o6 E3 A0 e) U- x. h2 j3 \ }, l" X" P4 z+ S: Z" R( s( r
cout<<"网卡IP地址如下:"<<endl;4 c; Y+ r0 I5 F" X2 _' d
//可能网卡有多IP,因此通过循环去判断
! ~. p( C2 E/ \9 b- l: y0 ~# l6 m IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
: @* g. x( ]7 w* w8 h* A7 s# h9 { do1 U8 d3 z5 R2 J
{- K0 l* K5 a1 G' a
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
/ [3 ]2 U$ y9 K8 y1 J2 K cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;6 F+ |$ `6 t0 T# `7 ^6 ~- M
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;6 B, q: r5 x2 p
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;& ]0 R- ^& M0 N
pIpAddrString=pIpAddrString->Next;3 c( U0 a8 a5 s
} while (pIpAddrString);
3 l$ x, Z$ q# _7 ]0 b8 ?# F pIpAdapterInfo = pIpAdapterInfo->Next;
1 K$ T1 }7 t% y6 K; k$ t cout<<"--------------------------------------------------------------------"<<endl; `1 [5 E! o, J" h/ A" s/ u
}
$ K% T: m) W* {/ }: R 4 l0 {8 S6 W- p0 _: ]
}
& U& e5 ? L' x1 ^- V4 ` //释放内存空间, m; C8 L9 v1 Z
if (pIpAdapterInfo)
( M# R8 M7 i/ m- Z6 R) e2 e% k {
/ F6 a) X1 g/ K4 Z delete pIpAdapterInfo;
% O) M" s2 [ U( L+ F6 r& E }
- v1 ~; L% m* ]! r& {% n1 { " O: b5 f: v* M4 a- y' \1 h
return 0;
- s6 ^+ {+ }8 `) X' Y9 t}
) W; Z; b4 u8 Y' \7 |9 U8 u
1 n) `2 M, v' T2 s4 z% D$ C- v |
|