|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
$ v) {+ N4 S s4 I#include <Iphlpapi.h>
1 ]: o3 f* l& l; W6 t$ R#include <iostream>
9 U, x: i* v' Y+ yusing namespace std;) c1 Z% B" g! i+ |, q
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
0 e4 k6 m8 W4 D8 b2 Q7 q. b1 L5 c9 I
8 k& h$ t% y) i& ~9 k. lint main(int argc, char* argv[])
: C _/ C5 u! y# C. i# L. |{6 k, B0 D, ~1 n4 n
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息6 ^% {! T. _" N" `* D& J5 Z* y/ E
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();7 J) h V; ?" W, Y5 r5 @0 T
//得到结构体大小,用于GetAdaptersInfo参数
7 ~5 A: }6 i/ [$ T( P$ X unsigned long stSize = sizeof(IP_ADAPTER_INFO);
! a9 X" ?& p& N //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量+ m/ B8 \. U) R" D+ a
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
, P7 T- l$ A8 Q! Q" J6 p //记录网卡数量
, w4 s) N' |5 @, L. b int neTCardNum = 0;
4 ^6 |( ]$ B9 ^ //记录每张网卡上的IP地址数量
! u# ~) C4 @3 h- z/ a d int IPnumPerNetCard = 0;8 P% l8 {$ t1 N) _! T4 O
if (ERROR_BUFFER_OVERFLOW == nRel)& Q, W8 m) f5 S; ? m; z5 s, {
{
. t' W: t) z1 Q7 t- o, X //如果函数返回的是ERROR_BUFFER_OVERFLOW
4 C: }- @, Y2 h" \ //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小1 ]2 a9 D( b3 K7 F
//这也是说明为什么stSize既是一个输入量也是一个输出量2 e: R. F7 u+ x" D
//释放原来的内存空间" y& a4 |9 L+ S1 x+ I
delete pIpAdapterInfo;
t$ y7 G* F& K& {; A# m% B2 N //重新申请内存空间用来存储所有网卡信息
9 H+ Y5 k/ f5 j7 \ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
( w! B: L& X$ |% a. C //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量8 ^8 z! p8 F$ D; v* |: Y$ M
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
& o3 c3 S4 W, G% i7 K, k" o$ r% K }
0 M: ?, l6 L6 ]. {& x if (ERROR_SUCCESS == nRel)
( E2 Y3 B3 ^/ z1 f& B {
, N/ W9 N/ D- b& Y3 v+ d( u //输出网卡信息% I; [' y) r4 b2 W" b4 }9 m9 c
//可能有多网卡,因此通过循环去判断
/ }) R, Q. M' F1 R while (pIpAdapterInfo)
- b: K2 `" ~) g' L( r5 q1 S& T {) N1 Q9 F2 y- j1 U+ R
cout<<"网卡数量:"<<++netCardNum<<endl;
* R$ F5 D% Y2 G cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
' X$ X! x3 ^9 a( m/ I+ \2 u/ M cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;7 C5 G T a$ `6 G) d
switch(pIpAdapterInfo->Type)! {6 T+ o2 w' t3 p) U& E. I( k0 ?" a
{+ K) ^& }* p9 V, F- q4 x% i3 Q
case MIB_IF_TYPE_OTHER:
( w1 c. L+ K$ N0 w( Q cout<<"网卡类型:"<<"OTHER"<<endl;
# Z2 N# T$ K$ Z3 b$ Y& {0 B break;
j8 N; k! g4 M# J+ E case MIB_IF_TYPE_ETHERNET:; Z0 O0 K2 Y' ?6 h4 _% f4 h( F% I
cout<<"网卡类型:"<<"ETHERNET"<<endl;
$ R8 j% z% ?+ S4 B! B break;/ \! a5 D) a; s0 m2 j5 m# m
case MIB_IF_TYPE_TOKENRING:5 P4 E* V5 q* R) y4 n
cout<<"网卡类型:"<<"TOKENRING"<<endl;
0 n* D6 Y$ E- T7 i0 l/ [+ k break;
( p+ q$ Y: s2 p- N b h case MIB_IF_TYPE_FDDI:$ G; \0 T* K5 o- {" L8 i
cout<<"网卡类型:"<<"FDDI"<<endl;7 h( V7 p& S% U1 D2 ]7 q1 P0 x/ O
break;
8 m; @4 ~( T) S case MIB_IF_TYPE_PPP:
+ r2 g+ F6 q3 F9 O( r& O" q# M {* g printf("PP\n");
( q9 i9 L( ~& _: d8 S" P$ ~' A1 E8 [ cout<<"网卡类型:"<<"PPP"<<endl;& p; Z( \* K3 ?+ s% D: V
break;7 S7 N2 s9 D- n; g3 s6 ?
case MIB_IF_TYPE_LOOPBACK:
2 h$ }% s' k0 n8 C3 N& q cout<<"网卡类型:"<<"LOOPBACK"<<endl;
( c( o, h3 @4 b2 [- J break;
1 @# X2 d& _: h2 O8 F case MIB_IF_TYPE_SLIP:
: e) M( a& L2 N8 X cout<<"网卡类型:"<<"SLIP"<<endl;
1 \$ K: i N% Y) ~" }* _ break;; J% W; _- z( i( d4 s% U
default:0 V) m+ v8 W% y1 f+ D$ n; V
. i" H) _5 c" N. Z
break;* ?% x; `' Y! v
}' \( ^8 X0 g/ H; D9 J
cout<<"网卡MAC地址:";
. V% r% J4 M J, w: J for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
% ]. i! R9 f' p8 v- l/ M4 v7 K if (i < pIpAdapterInfo->AddressLength-1)
$ @4 B' h' p$ ?3 x {1 b) C$ T T; M4 }3 b- r/ R
printf("%02X-", pIpAdapterInfo->Address);/ W; ~3 p" u" T( u; p" `
}
, c8 h0 i! L' n) {5 x4 t else
3 Y: y$ |% J( v6 ] {
6 J. _3 A( b! X# z# d9 r printf("%02X\n", pIpAdapterInfo->Address);
7 D6 Z* J0 X( o }
' H: p4 E4 ^0 a& X cout<<"网卡IP地址如下:"<<endl;) b( |4 K0 m8 h1 U
//可能网卡有多IP,因此通过循环去判断
- F: k5 z8 q4 |6 ] IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);8 | d: i2 N7 [* n4 k% k
do, L) W [$ Z! @* K. w' _5 h4 w
{6 d6 S6 V: v6 j" }, s
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;* K/ h+ q* p8 T
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;$ S% B7 A* E, ], [/ C+ A
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
$ e7 `7 i. F! v" L- o& r cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
, O4 ?! i: h; E; `8 S" [8 N% b. w pIpAddrString=pIpAddrString->Next;
$ v- c2 _" K" Q: M& x# G4 l } while (pIpAddrString);
& g+ v2 o: X7 h' z pIpAdapterInfo = pIpAdapterInfo->Next;
/ Y7 t. G8 e; H5 F' P. k8 M cout<<"--------------------------------------------------------------------"<<endl;
- A. J5 M9 H( ^" L: b }
- i6 U, F( _4 u8 y8 U 6 M' ~7 S/ L2 i
}1 H/ n D' J' a4 f' L. B8 Z* N
//释放内存空间
) S N: e$ l1 T5 x! [* r# V if (pIpAdapterInfo)
5 A4 k" t. _, z' V D- _' e; u1 K {
+ z5 t$ ?, D; x7 R4 ^8 |. A0 J+ S8 s delete pIpAdapterInfo;
# p' Y( \: J/ m }
) ?. `( w3 F0 y* |4 @* V; D4 x b) L. f |8 i x z: ]7 z U
return 0;
% \, p# q* V! x: Q3 z; M}3 Q: {% z1 o# y0 N- }: v, l3 R0 l" `
9 d% \7 }+ w. Z' U! B2 i, I* i! t }+ `
|
|