|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
, d" R2 u, V# W( L2 O#include <Iphlpapi.h>0 b- h6 k M& ^" ]
#include <iostream>( z5 `6 A, V4 Q0 A% r5 A( U0 m
using namespace std;6 ^% Q, v+ `: t+ L) h1 e6 [
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库. z; N5 j% y, f+ {* ~9 U. u% E. ^
4 h$ N1 B9 u2 a q# X) cint main(int argc, char* argv[])
. P9 W( @! d6 R, N _9 C, L7 F{
8 V. f+ z/ _7 M# t& x- M) n7 Y //PIP_ADAPTER_INFO结构体指针存储本机网卡信息& f- A$ d# G5 b5 C. p& Z' M z5 ?
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();3 S- L1 ~! i8 A- N
//得到结构体大小,用于GetAdaptersInfo参数, K6 e8 b# y9 v
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
& g3 O- f+ e8 G# A3 m* b" I //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量! ~" G5 A/ X3 L
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);+ @) U* Q: V" q1 ^. t
//记录网卡数量
& T( |8 F. r' k, l! Z int neTCardNum = 0;: G# D3 e3 C5 K& v3 {' h/ h4 r
//记录每张网卡上的IP地址数量! `! {! D3 M+ T! t- Q
int IPnumPerNetCard = 0;
% _! L; T* W5 P1 e% J6 |8 M if (ERROR_BUFFER_OVERFLOW == nRel)
) q4 u. v1 J6 A. i' g$ v) X1 a, [! M {3 s, \( F, {2 @$ p0 y% k" R
//如果函数返回的是ERROR_BUFFER_OVERFLOW. f9 H2 d3 m& Q' h6 |3 r$ J. j
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
3 M) I/ k( _/ l9 x% ~$ O/ W" n& r9 O //这也是说明为什么stSize既是一个输入量也是一个输出量
, X, z6 _8 H! [% u9 h8 p //释放原来的内存空间/ O O: p, x. h6 K
delete pIpAdapterInfo;# U/ C: n# E7 ^2 Z5 x" U* R4 ?
//重新申请内存空间用来存储所有网卡信息
! C Y9 `2 |3 a. ]8 t3 x" x pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
( `. n" o, I5 M+ ?) L I //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
. S) E2 y: f Q nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); / U2 V: P7 }- O+ d' j
}
# ~; L" U+ U. z! S' ?/ |3 h9 y if (ERROR_SUCCESS == nRel)
; W! x4 h) w6 O {. x' ?1 Y3 C: P4 {
//输出网卡信息9 h: j% j; ^. ~- I* @0 F2 W/ v
//可能有多网卡,因此通过循环去判断
6 L/ w/ I# n1 M5 y; z6 v while (pIpAdapterInfo)+ S, I; c0 L. Y2 X
{. c0 e" b" w2 U% c8 N6 B: M
cout<<"网卡数量:"<<++netCardNum<<endl;+ x' c9 K, Q; s% U
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;3 [( B M- L: H3 L7 h( @. h5 q
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
- r. E+ I8 T* q% r switch(pIpAdapterInfo->Type)* E: t- @2 y+ M8 p+ j+ c; `+ q
{
8 C4 `" n3 w* n/ Z' b3 c# p: u- ^ case MIB_IF_TYPE_OTHER:
8 X7 P, X7 k& g' K. m" I cout<<"网卡类型:"<<"OTHER"<<endl;( v% {7 W. j& T# G4 q a6 G% O6 K
break;
3 j- H) o' W% O1 E# d0 S case MIB_IF_TYPE_ETHERNET:
0 D3 j6 X2 p) v- v cout<<"网卡类型:"<<"ETHERNET"<<endl;/ ?' J/ ~" ~. m- Z$ y& [- x
break;
w! Y4 ?/ \$ P- t case MIB_IF_TYPE_TOKENRING:- F2 B: S. m" W. p. w8 R0 J! y
cout<<"网卡类型:"<<"TOKENRING"<<endl;- M+ r( T9 n& h% m: [
break;9 [( q& L* J" n# b5 r+ i; Q8 M
case MIB_IF_TYPE_FDDI:5 @8 A0 u; a1 b' C- ~0 u) i
cout<<"网卡类型:"<<"FDDI"<<endl;
( `* N0 _0 Y2 e6 G: K break;1 A- r: j. P o1 y* O) |
case MIB_IF_TYPE_PPP:
% i3 A! `: E; B; V9 \ printf("PP\n");
4 U& M0 h. J; f1 P" W5 h# N$ a, G+ n cout<<"网卡类型:"<<"PPP"<<endl;1 _, F4 U# m! o' b6 x* O
break;
( ^% Q6 { V2 p1 h, ` R( H case MIB_IF_TYPE_LOOPBACK:# p d. Y& j7 C/ X& W
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
, U, R" e' M% a& `+ l8 i break;
" v3 X: s/ ?( h+ b8 ~2 W8 r$ k% i8 H case MIB_IF_TYPE_SLIP:
# B: y a2 F+ ?7 \( Y cout<<"网卡类型:"<<"SLIP"<<endl;. M' T- z& X& B" L' l
break;
$ c I: `1 T; M% ] H default:
( G* k i# {- @, P! P" u! Q) K$ K, x& Q5 j
break;
% D) G. ? P; d6 G* i$ `0 q3 [ }
- K I. X' }& W2 T cout<<"网卡MAC地址:";9 e$ d8 P: z9 i6 B
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)' A9 ` N1 J. `7 e
if (i < pIpAdapterInfo->AddressLength-1)
7 G% x+ x8 n# v1 q; N* g1 M* K {. M9 F! P6 l1 x1 {9 D* n' b6 ]& u
printf("%02X-", pIpAdapterInfo->Address);
0 ?: V0 G& S; ?3 L# Y* z }
/ O9 _) C2 Z1 l$ E& n- f; C9 s# |% d else1 g7 x! H9 C& _, G: o
{
$ d ~0 ~& M7 P' _/ P/ O* e printf("%02X\n", pIpAdapterInfo->Address);, L/ N9 N; e* b7 U% X
}, W/ y0 n% M. h( q& w/ |6 H' J
cout<<"网卡IP地址如下:"<<endl;- E) y s! K0 e3 B3 }3 |
//可能网卡有多IP,因此通过循环去判断
8 Q. U1 _# u) U- T; e IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
7 [; B! s( c7 v2 }2 S. ^ do: D. M! Y. i9 j* B* L S; I
{
+ l& r+ w( ^7 B" ^" J cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;! x4 T& e# y1 \( H1 U
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
1 x3 C; A/ R: u0 b( a' W- A/ \ cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;0 V& W2 `$ D* v6 a- x+ l- B, I# K
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;( N, B$ c. A6 o% B0 K/ X
pIpAddrString=pIpAddrString->Next;* L& J K3 S2 c8 A5 B
} while (pIpAddrString);* y r; @* h3 C9 V# o' [
pIpAdapterInfo = pIpAdapterInfo->Next;
3 |4 z+ t1 g4 Q4 ~+ f cout<<"--------------------------------------------------------------------"<<endl;# \8 p2 ~2 ?' ^* i- |' M( o* z
}
: o# o7 s0 h2 w' s
% l# k* `, ]% G8 W }7 T/ Z( t8 f1 M' o9 ~, U7 E
//释放内存空间7 d- l% B( y/ V% Y" F' o$ |
if (pIpAdapterInfo)$ `+ b& o: |8 v9 J2 E) d( T
{! k) d- {5 \6 n$ q
delete pIpAdapterInfo; ?- ]3 H* a' V- ^5 b* M$ J
}1 m4 U9 o$ b' I N9 @! I+ G
. ~& M9 W5 t# q return 0;# u3 |: X* A5 E$ d' D
}
4 E5 W6 A- o$ m1 a# i4 X# y% r* F0 j: y, S2 K# @2 M2 y
|
|