|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>3 v6 |) M4 ^7 D2 A+ d. @* b3 T
#include <Iphlpapi.h>
' k3 _7 ?2 k+ I1 d' T; [* a; I#include <iostream>
$ k+ d+ Q: \4 F o* Qusing namespace std;
1 \0 C! L$ A) J1 c# `$ |/ l+ r8 Q. G#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库1 o2 K, T" q" {: p1 T
" [$ d# p5 f( d% V9 Q3 \/ ?
int main(int argc, char* argv[]); q, K6 f3 h4 E' B
{: e) g5 S) f/ R( ~+ W4 R) G- B
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
% C' l4 i x2 r/ o0 M8 G6 E2 Y PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
" Q {2 ~" U# o, K5 A //得到结构体大小,用于GetAdaptersInfo参数- F8 A7 }- v% e) w% F# ^
unsigned long stSize = sizeof(IP_ADAPTER_INFO);) g& F8 G" Z9 H H4 j: w
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量) s, P$ A# k8 I- J) {% `
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
1 [ y K3 n" @. o" [' E //记录网卡数量
) g* O3 |4 ]& x9 P" e3 ~ int neTCardNum = 0;
( a7 R1 L3 T; h7 j' m1 j, k" @ //记录每张网卡上的IP地址数量6 e ` P( F7 o$ Y- v& R5 G
int IPnumPerNetCard = 0;( o6 c: G8 n+ K5 c W& q0 I
if (ERROR_BUFFER_OVERFLOW == nRel)5 a* {& h* \& K
{
: t$ t7 b/ k. `' c0 g( \7 s //如果函数返回的是ERROR_BUFFER_OVERFLOW2 ]+ ?3 S u$ O/ M6 {' K
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
( Z7 v* P9 Q; A, _2 z1 E //这也是说明为什么stSize既是一个输入量也是一个输出量6 C ]& Y% q" _0 r: A" B. S
//释放原来的内存空间
& [( F' x9 M f! Q9 o+ C& D& K delete pIpAdapterInfo;
2 [4 g; j) r0 B9 C5 Y4 {; {! K; { //重新申请内存空间用来存储所有网卡信息
- X' u( c3 i8 b9 L pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
) w4 O* ]- [$ u& `9 E //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量4 g9 Y$ g1 ]; w
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); % [9 z; ~' i% H/ Q
}0 M! n& N) a8 K- m) ^% v
if (ERROR_SUCCESS == nRel)/ w3 h1 {! [. X$ A; H( n
{
, S. |( l, n- m //输出网卡信息$ v; b$ q+ b3 B
//可能有多网卡,因此通过循环去判断& b) D& N! V' b w
while (pIpAdapterInfo)5 p3 G+ c. _2 s9 I3 L0 |
{
" D2 F$ O t, r* d$ n3 G cout<<"网卡数量:"<<++netCardNum<<endl;
R- D: D5 v1 o3 j4 w2 m4 I( t cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
- n$ i$ {0 U a* f8 @& ~. v cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
2 [, V, G+ m) J6 b switch(pIpAdapterInfo->Type)
" |: t S) }0 ?( u) Y& |6 K0 o* `+ [ {
* q7 t r! |$ }9 H3 x! t5 Q case MIB_IF_TYPE_OTHER:: Z1 b; G1 K* m% }
cout<<"网卡类型:"<<"OTHER"<<endl;
8 @+ Q4 }( j- {3 W8 B* @. K break;4 m. P0 ^ u) P, ~& @* f8 i
case MIB_IF_TYPE_ETHERNET:
9 \1 x) l# Y$ k8 V6 L- s$ @6 b& U* P P7 h cout<<"网卡类型:"<<"ETHERNET"<<endl;, X/ d9 E" A3 [) n7 Y
break;
4 R/ P" s7 f( t S2 o case MIB_IF_TYPE_TOKENRING:- R, p* |% J+ s! r/ X
cout<<"网卡类型:"<<"TOKENRING"<<endl;, W" |6 m" d3 t5 k; S( W
break;
6 s$ U' k; P! @3 @" z! r case MIB_IF_TYPE_FDDI:
2 A: m4 t2 p: f; [8 X/ R. o cout<<"网卡类型:"<<"FDDI"<<endl;
2 E0 I3 |& S$ s% i2 ? s. F break;4 `! J0 L- y1 g3 g3 \' z
case MIB_IF_TYPE_PPP:& L7 j8 S' K- o, T& v# b
printf("PP\n");
% g( z o% r) E7 {/ I cout<<"网卡类型:"<<"PPP"<<endl;8 p9 d( b- D9 O& ~5 K
break;
- v# d3 c) c. ~8 N/ N case MIB_IF_TYPE_LOOPBACK:, U9 m. N' X$ @1 Z+ Z
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
; C# _" x7 V1 g/ a1 c V5 q( P break;& G8 I$ d: v7 g
case MIB_IF_TYPE_SLIP:
% J( t9 [5 _. G cout<<"网卡类型:"<<"SLIP"<<endl;2 G$ o, Q( F" y
break;( S# f! A+ f+ g- \) D+ c
default:; F) N& Z4 v; U( m0 w
+ G8 V- E# B5 }' ^6 s! v break;8 z& {: ~7 ]( o
}: a N U3 B6 n. L2 w+ C4 _
cout<<"网卡MAC地址:";- S7 d3 {* h+ d' _
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++). q- n b' F# b/ p
if (i < pIpAdapterInfo->AddressLength-1)
+ ?% g1 {8 o3 i1 Z2 M {( z7 r9 O8 J. t8 W
printf("%02X-", pIpAdapterInfo->Address);9 W; n3 B8 V! ^' ]8 H( J
}+ e8 ^$ x; Q0 E1 s5 {4 `
else
4 d# t: x$ T. X0 J% M! O+ N- C {
7 P5 ]% k0 v/ m7 O& Y printf("%02X\n", pIpAdapterInfo->Address);
, l" \) K# s4 s }" o" Y! w: ^3 i5 F0 k
cout<<"网卡IP地址如下:"<<endl;
: V& c7 S$ f7 u4 e9 G7 U5 c( Y! o //可能网卡有多IP,因此通过循环去判断
* }& a$ i+ c5 M1 O( B IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
* W, f6 i& X' V# N5 W% k! m do8 M6 q7 G% n4 |7 ^; Q$ m
{
- ?: i' v" G- U. I2 f/ ~! V, c+ u# J cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;$ a" F( v& f! H: F
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;) U* A0 m1 f! Z8 ^4 [( @, x' h
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
% o, d' F) n- Q$ \# ]" |" I6 |# B cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
* q7 k) O, p0 A, p R pIpAddrString=pIpAddrString->Next;6 `' W/ L, N' q7 A
} while (pIpAddrString);
9 C4 }6 Z' R9 t, M pIpAdapterInfo = pIpAdapterInfo->Next;, N9 q( C Z- I8 _$ v, B. q
cout<<"--------------------------------------------------------------------"<<endl;& }' E B3 k' ]- a& J
}
& @; ]3 x* p- z5 b3 X1 ~9 |& p & T6 s4 q a' f, Z( A1 ]
}
. O9 g6 g: L6 R- E% ]! ~7 A //释放内存空间7 m; i% b, Z3 X) Z$ J
if (pIpAdapterInfo)
5 E3 p9 }9 R6 V7 }! B {
( \, Q* k) y2 w6 a$ f1 @, k delete pIpAdapterInfo;4 w! f) n. J: V6 ]
}$ l5 A/ @" @1 |- R
7 b1 U& q/ s. H, F- p) _7 |) ^
return 0;
! O a0 h1 e2 R/ a: [! T5 B}
0 ?5 Y2 P9 \& E
7 A0 A/ Q0 {& ^* @, [4 ~: e |
|