|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
#include <WinSock2.h>8 F8 K/ Q8 T1 X3 g l3 {
#include <Iphlpapi.h>2 r* Q: f' r. W {/ G
#include <iostream>
5 Z2 b* U. u( S9 susing namespace std;
2 M/ B7 Q0 f$ z( A1 h! I5 q#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库( w# B7 O" G; E9 K* }- m* g
/ o6 ]" Y' b! m2 f- r4 W, pint main(int argc, char* argv[])
) i( f- ~7 Y8 Q$ y{( Q9 _& F0 Z$ O; C* L* I% V
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息6 d- W1 F8 o2 j' E' S; u8 N! U1 d
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
b) @5 s5 W" |! U //得到结构体大小,用于GetAdaptersInfo参数0 _! E0 u6 ^# D+ i2 {% g( t
unsigned long stSize = sizeof(IP_ADAPTER_INFO);# |# o( ?/ B8 a
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量& [' g/ Z) j2 C# K, H7 v% Q
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);4 r7 i7 y. Q5 {& s( U, h3 E
//记录网卡数量
; M# i! e3 y% E int neTCardNum = 0;
- L: x J! m0 C) Y7 v m/ n //记录每张网卡上的IP地址数量: I, ^) q- X( F( K' e8 S
int IPnumPerNetCard = 0;# ?- _8 A% _% C0 L0 x4 x
if (ERROR_BUFFER_OVERFLOW == nRel): Y5 v' J" J/ x: c* [/ J; y
{9 G2 ]0 ^* f& d
//如果函数返回的是ERROR_BUFFER_OVERFLOW
6 j; `6 L3 Z" j; H) m //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小1 g* g& f4 T9 a6 ^! D5 }; z
//这也是说明为什么stSize既是一个输入量也是一个输出量
" u3 j; `$ t4 `. w) n! Y K$ p* w //释放原来的内存空间
9 z6 ^& ?. J0 B5 E0 Q, I9 P delete pIpAdapterInfo;
% L. Y- E0 c, r& O9 n- P //重新申请内存空间用来存储所有网卡信息) Z/ I E* m$ T& l# J
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
3 p3 G6 A1 b" I# T0 P2 H) J7 D- ]7 g //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
. h3 G1 n8 j8 H Z3 e) _ nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
) X7 `9 V) r3 r7 n# @ }
! e, W* W0 c. P. h8 D if (ERROR_SUCCESS == nRel)& }8 P' `# X+ }# m/ ^
{, L. X- M" ^) t3 T1 ^& N s. k
//输出网卡信息' D9 _' j3 n1 t3 r* K% q( I$ z
//可能有多网卡,因此通过循环去判断0 Y5 n: O0 f& f
while (pIpAdapterInfo)3 v' x; S' R! f5 A- V
{
" p/ j% {0 Q& E3 I7 U* i* s& M5 l! u cout<<"网卡数量:"<<++netCardNum<<endl;% P2 t; a, d: A- |/ g3 E
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;4 V9 S7 \/ S5 ]; p6 }9 J3 D; E
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
* x1 u- t* S+ C: d2 m' h switch(pIpAdapterInfo->Type)
6 E' v5 L- F# d8 U/ t1 _5 g {# h& [# R$ X+ _' Q- a. j* M
case MIB_IF_TYPE_OTHER:
+ J; C! x* f) [; E. k cout<<"网卡类型:"<<"OTHER"<<endl;
$ D7 b7 j& T9 y9 h break;
) |' y. L" Z* p# t9 [ case MIB_IF_TYPE_ETHERNET:& S0 C. W# ]/ r) n$ ^- ]& t
cout<<"网卡类型:"<<"ETHERNET"<<endl;3 L9 b3 p8 e2 Q# \9 s
break;
6 G9 K# a9 i9 G case MIB_IF_TYPE_TOKENRING:
x- s4 J$ @5 h, j9 \- h8 C" M cout<<"网卡类型:"<<"TOKENRING"<<endl;5 h: k- k1 k; Y2 u& q
break;0 k/ E6 t* }4 v3 ~' d
case MIB_IF_TYPE_FDDI:$ h& |/ r6 v4 s- @ [/ O& b
cout<<"网卡类型:"<<"FDDI"<<endl;
1 j+ l& t0 [) ]0 S, g! Q8 B break;- m, V" j* j9 y4 H) d' c9 d
case MIB_IF_TYPE_PPP:' H$ J- H* ~! u% D% B$ |
printf("PP\n");
: I$ P: G# Y ?2 Z5 n) h cout<<"网卡类型:"<<"PPP"<<endl;) \2 t: U8 V9 {; t
break; Y7 q# j1 M. ^7 I( a
case MIB_IF_TYPE_LOOPBACK:% b' `; R: Z( @+ P3 E
cout<<"网卡类型:"<<"LOOPBACK"<<endl;5 M1 J" ]; g6 ~8 a* b1 c) ~$ |
break;
% n& l3 U. ?0 M6 x( Y; D case MIB_IF_TYPE_SLIP:9 ^9 N0 y/ H( z! Y# `* d; n/ Q0 n
cout<<"网卡类型:"<<"SLIP"<<endl;
9 I8 k/ N) F# r0 V break;! U4 `0 e+ ^& I' W. K
default:: B; Q& [5 i3 f7 m
4 [% _/ G9 k/ Z/ C break;
6 b& U+ x- b+ @6 @ }3 w6 J) F% S( P: n6 G1 g0 a3 \% h( }
cout<<"网卡MAC地址:";) V/ J; Q6 e8 O: s+ K9 u
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)5 F; Y# {+ ]9 u* t/ w
if (i < pIpAdapterInfo->AddressLength-1)1 i: `' O* ^" {) D# `6 P9 `) ]
{
) X' U% o# N) N# b, m printf("%02X-", pIpAdapterInfo->Address);
0 b; u6 n- ]: c' o5 I/ j }
/ G- S( K3 L+ h M d8 p else/ u) T0 f5 M& W* D& c
{( n6 P/ @; `8 k" M% J5 a& u
printf("%02X\n", pIpAdapterInfo->Address);
; q% I5 \: T4 A# x6 |: | }' k& a. \1 d# o
cout<<"网卡IP地址如下:"<<endl;
, y7 Z0 P& _+ m, G) ?$ P //可能网卡有多IP,因此通过循环去判断
' [6 K8 @! I+ ?- u9 t$ I IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);) W0 }4 r4 z6 M
do' b0 I1 K+ @& I/ U; ~/ f# |
{
% a& l1 C9 g! E) }) H cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
" g( v) L5 ^+ c* M$ S cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;& A4 g8 Q+ ^8 ~: ^
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
$ a. F, o! A9 `& J7 n5 M cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
0 G$ z$ l ?- u2 S T pIpAddrString=pIpAddrString->Next;- j' M6 L. H) c9 B1 ?% \! v2 J
} while (pIpAddrString);, b8 s( g( _2 y! V3 i# h% u
pIpAdapterInfo = pIpAdapterInfo->Next;
4 R& s' w% ]! ~8 o# E) \ cout<<"--------------------------------------------------------------------"<<endl;6 ]* `) H. g, O/ q8 ~
}* d% x9 e- A0 d2 h* r( X) g1 c5 I
, W7 p) g8 G2 E- I% E2 s }
7 { l: w( B5 e) y //释放内存空间
$ L- h C0 D9 e. l* {2 T8 w if (pIpAdapterInfo)2 Y- L! W3 v2 m4 k( O5 L' d
{
L" ]' V! i3 Z H# B! a delete pIpAdapterInfo;' L* s3 X' [2 E; ?
}0 z# u7 [4 o; r
* L% U/ F1 i! h
return 0;3 V& Z$ D2 a: ~" k! y O: T0 Y
}$ C. v2 p/ t2 |( z
" ]7 z6 W3 a# y. h% G! t |
|