|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
" B9 X. S5 y) s0 @1 }8 ?) w#include <Iphlpapi.h>7 a' N1 g% \+ |: w# S; t5 b) c
#include <iostream>
% b0 E7 w3 t4 i& b6 R0 j+ tusing namespace std;# V* Y# F4 {* [' X/ s
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库4 p; a3 m) k" G% ^
2 q. f6 H* [9 ], m" b- g
int main(int argc, char* argv[])
2 i( r' a; Q, f& K, @. E{& L* j2 o2 z7 o* w1 g% Q
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息3 a; C! S' E7 w
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();. c$ G, O2 A% }
//得到结构体大小,用于GetAdaptersInfo参数; W4 s r9 N; m
unsigned long stSize = sizeof(IP_ADAPTER_INFO);( p& |: G: l2 I! ^" q
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量0 I+ H M# l$ |0 m
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);& o! y% s$ y! H& n N5 I' n( D6 ~
//记录网卡数量
% H9 n: I9 M: Q) L I1 d( _, x% Q int neTCardNum = 0;
) |4 F8 I" d- C Y$ v$ Y //记录每张网卡上的IP地址数量; p; v' y# d( C; M( z
int IPnumPerNetCard = 0;
' \) V" Z$ j: P! L, \ if (ERROR_BUFFER_OVERFLOW == nRel)+ Q% b& x$ S1 w* |5 e4 m
{0 c) _5 h. y5 i) S4 S6 t
//如果函数返回的是ERROR_BUFFER_OVERFLOW
$ [, D8 b! _% E- P$ Y( a+ O //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小8 ~! r1 B9 P' |
//这也是说明为什么stSize既是一个输入量也是一个输出量
* N: ~' E; ]8 g5 n' O8 S //释放原来的内存空间, w* [, y) K# W8 z
delete pIpAdapterInfo;
0 Z. T0 [$ c7 I2 p //重新申请内存空间用来存储所有网卡信息: I4 {, k$ ^$ D _, G
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
1 b7 ~! M9 b$ x //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
; n9 T' x2 l: ~$ y0 z$ K/ f7 s nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); , D/ `4 m2 ]' l# G5 L
}
. [4 m1 i% L6 S% l( l if (ERROR_SUCCESS == nRel)
0 Y6 a# A6 ^' {$ K$ d# m% k# } {* ]& ~# \& x, v6 L- p
//输出网卡信息. v, o: T/ S6 J# I
//可能有多网卡,因此通过循环去判断4 [ L3 T% Q0 e* L+ n
while (pIpAdapterInfo)( Z b e7 _- q8 }
{6 B6 _# V6 @, m
cout<<"网卡数量:"<<++netCardNum<<endl;
9 F8 G2 b3 u5 T3 D! x) u+ ?" M+ R cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
# o K! ~9 l% r9 R cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
" D" G$ g. {* W8 P switch(pIpAdapterInfo->Type)
5 _7 Y' f `; b8 n; L# }4 u {
! }( p% U3 K# W; a, N case MIB_IF_TYPE_OTHER:4 s6 y2 ~( N3 k& k% L
cout<<"网卡类型:"<<"OTHER"<<endl;
/ Y( y7 s5 u3 b0 W' f& k; U break;; }% @5 z' t' C# j' ^
case MIB_IF_TYPE_ETHERNET:
g1 [* n1 P h! B4 f6 l% S cout<<"网卡类型:"<<"ETHERNET"<<endl;/ r8 J9 u6 p. e {- a# R" W
break;
; k. ?3 ^6 ?: \& j case MIB_IF_TYPE_TOKENRING:
% J h# Q) y: ~) G E cout<<"网卡类型:"<<"TOKENRING"<<endl; ]1 O. e" K" v/ n: Q$ [& L
break;
$ r# k: f) `7 E _% s case MIB_IF_TYPE_FDDI:8 r( B1 S% k9 H/ W L
cout<<"网卡类型:"<<"FDDI"<<endl;6 c5 m- O, {' z/ r! x
break;- a: W# R' N9 h3 q3 [) [& M
case MIB_IF_TYPE_PPP:
" D3 @6 l1 T- P. g% f: \2 e printf("PP\n");
R; Q9 C0 E# M* j7 ~! L cout<<"网卡类型:"<<"PPP"<<endl;2 K6 `( f0 k3 d4 k; C. f) I
break;2 t( @; h9 e# W
case MIB_IF_TYPE_LOOPBACK:3 r( m; `" c: \+ L- j [
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
! K' W) _0 S* N2 c0 }0 ? break;& f2 h" \: B: f. c* Q! n+ I% G. c
case MIB_IF_TYPE_SLIP:
; }+ y2 V/ ~$ g' O cout<<"网卡类型:"<<"SLIP"<<endl;
2 K* A5 V9 U2 i) U( ^+ v break;
( m! u. L7 @" L* v% | default:5 s& ?5 M6 g" |6 ?
2 O B8 N- W' d: x9 Q- Q) Y- J/ G break;
3 {0 z( U# B8 \/ `" A. z& z4 d9 U }
F7 O) K O$ w5 S" J3 N/ E cout<<"网卡MAC地址:";" |3 l2 \, N# V% C+ e- z
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)+ D+ N6 p# X- Z9 O( a, G( x& _- X4 `
if (i < pIpAdapterInfo->AddressLength-1)/ m( @+ ?7 K3 ^
{
+ m* x# x7 f9 _9 y7 V h9 v printf("%02X-", pIpAdapterInfo->Address);+ x( j; P8 I2 v
}
3 m J8 v3 Q% N; d; L else& R4 g5 X8 {) M
{/ `7 E0 u% [! ]- q+ a* J6 ?$ a+ k
printf("%02X\n", pIpAdapterInfo->Address);% c* S: I2 |/ L; O0 K: J
}
$ p% E2 C+ k' [% U+ ~ cout<<"网卡IP地址如下:"<<endl;
* I" x; d' k4 N3 F( V7 z //可能网卡有多IP,因此通过循环去判断( [( P9 V. m2 Q0 h$ t9 ^: V2 w7 b
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
: o8 q; A/ h! Y5 G do* E; h; h) Z# \, I1 S2 T, n9 w
{
& ~/ U/ t1 p6 J( n1 G7 W6 m. R cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
% g1 q# k" n+ E" Q cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;! }4 H- P0 M3 |4 a* P2 Q
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;( W: u6 i: H% j& a* }+ C+ }! x
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
$ K% s. q5 Y( `; a8 L pIpAddrString=pIpAddrString->Next;
1 {- y5 H: [6 B q } while (pIpAddrString);
5 g" K/ p* _' y' @9 N; Z! _& p" | pIpAdapterInfo = pIpAdapterInfo->Next;5 w E( S2 f1 z9 }
cout<<"--------------------------------------------------------------------"<<endl;
3 X1 D3 w3 E; f' |3 B: b% E7 Q; C }
7 g5 W5 j$ S1 z, S 5 j. J4 g% q/ a
}
5 `$ |& O; X7 h //释放内存空间
& Y5 t" u0 U$ V2 G if (pIpAdapterInfo)4 u% y" @8 d8 f% m- s
{5 ]% h" A: s- d6 z6 ?5 P
delete pIpAdapterInfo;
+ ]+ l O: U7 h% T }
# T1 o% h& C6 S: F3 U5 Q N0 h , m& [6 r: m- |5 K1 z* L
return 0;
0 n2 W3 |+ Z0 v! r; E2 a+ B9 J}: L, z/ h' r, B% R; u0 T7 I
2 x, Q( @3 E" o1 y
|
|