|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>/ p. m5 u: J6 u" ~
#include <Iphlpapi.h>. C+ A( F7 {0 ~5 `
#include <iostream>
. ?" _$ D0 {, j2 C0 Susing namespace std;
) p# W/ \; \- L. z#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
; l0 Z) _9 f. h$ \- b. X) [7 h3 T$ L" M
int main(int argc, char* argv[])
# t% q% y$ F" B! }. _% E{" T0 G. i. }: L7 }. L/ h5 P% {
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息6 y7 M+ O0 |& ?# U' Q
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();3 S. w) G, a' A" F+ m' {) t
//得到结构体大小,用于GetAdaptersInfo参数
/ R& l3 N$ E2 I7 U unsigned long stSize = sizeof(IP_ADAPTER_INFO);2 Z, N( z" R0 O
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
5 D6 L H# G. E/ H( j( m int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
) H7 a" [. ~' L //记录网卡数量+ E+ T7 V% e$ I1 V
int neTCardNum = 0;+ E6 I3 M2 T4 @
//记录每张网卡上的IP地址数量5 P8 Q# ?' {4 m( h, Z" {3 o+ O
int IPnumPerNetCard = 0;9 D; m. s/ n" z4 g# H- ?/ G
if (ERROR_BUFFER_OVERFLOW == nRel)) w2 F5 [8 E) n5 D& m& q
{2 s* z" D5 S7 R8 m$ ~
//如果函数返回的是ERROR_BUFFER_OVERFLOW7 ? z& a N& `2 C; b
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
O* k! ?7 z8 S+ w0 e, } //这也是说明为什么stSize既是一个输入量也是一个输出量
. \5 L8 v. J5 k //释放原来的内存空间
' {9 c# h+ U, g3 l delete pIpAdapterInfo; ^3 ?& F! D2 M3 P
//重新申请内存空间用来存储所有网卡信息) W9 D$ k) e4 X" ~1 u% l
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];& m4 O' i& ]' q
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
r& l* X9 f' N) X/ \6 z nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
) \( \7 ?7 j( f! E }
9 x/ B) T2 t$ k% b! G9 f if (ERROR_SUCCESS == nRel)
( o% a) p% s- b1 g V {( w: ]/ R- k% U3 p6 w: _/ w6 e1 _
//输出网卡信息' {0 \. O, ]( L# I; n2 U
//可能有多网卡,因此通过循环去判断
2 {4 p& H5 z5 @! z1 x. R while (pIpAdapterInfo)
! L1 [5 i$ h7 U/ f- h+ L' Z5 m0 l {7 l" U6 \7 T8 F/ K9 R' e- B
cout<<"网卡数量:"<<++netCardNum<<endl;: @7 p g' y7 ^# h: [" C, Z
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;0 i) R+ s2 M6 T
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
6 K& C; s5 U. Y. ~ switch(pIpAdapterInfo->Type)
% J- d# g, O6 K& Q$ ?4 f. t, O, C {/ o& v& v" d! ?' n. B2 `
case MIB_IF_TYPE_OTHER:
: R) x7 y; U- b& ~7 L: { cout<<"网卡类型:"<<"OTHER"<<endl; T% n2 e9 n3 a
break;
3 u4 H/ h& `! Y4 E! c, S) A case MIB_IF_TYPE_ETHERNET:
- z( W R7 l# w# M8 T H& X cout<<"网卡类型:"<<"ETHERNET"<<endl;" D. v5 c. @$ B$ }9 j9 x, z: U1 f; c
break;
6 S P; a* q; f$ Y case MIB_IF_TYPE_TOKENRING:0 p0 q& s! l5 U5 h
cout<<"网卡类型:"<<"TOKENRING"<<endl;$ g7 b5 T! v, H3 E0 l
break;$ ?$ _0 {4 }. r$ f: X
case MIB_IF_TYPE_FDDI:
' O' D4 D+ l4 |1 H cout<<"网卡类型:"<<"FDDI"<<endl;
" b% ?* M, q8 D9 `$ }# x break;
$ y- O2 j; f! ~( T# @# H. p2 K case MIB_IF_TYPE_PPP:4 _# n% ~" I" P& y: T1 H5 W
printf("PP\n");
" P* }/ Y: n+ w$ x: \3 t- x" z cout<<"网卡类型:"<<"PPP"<<endl;
$ V2 B, t8 O5 t# G; J+ z" A- H break;
0 W$ x0 m W' ~) p; W case MIB_IF_TYPE_LOOPBACK:
, n2 j; v5 N+ `2 N- c9 t cout<<"网卡类型:"<<"LOOPBACK"<<endl;
( p: {7 e$ f2 B; ? break;
9 a& D: o2 \$ j" V6 U' u& K case MIB_IF_TYPE_SLIP:6 j! P3 `/ F8 Y
cout<<"网卡类型:"<<"SLIP"<<endl;: B2 P$ @2 @4 n3 Z+ i. ]: H
break;. f% C, i$ E1 k# C, R( ?" ~5 R$ T# o
default:" W; c1 H1 X, M @
) a# @4 ^( |* {( a& L
break;
! {; \% T- Z- T u& V0 Z }' m( N$ N& P0 e3 }3 |, f- _+ |
cout<<"网卡MAC地址:";
) _' K" w$ ~2 O# l3 T" k* s for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
, p3 \& h" m7 m+ ~+ L9 Y if (i < pIpAdapterInfo->AddressLength-1)& h h5 [: E: }. f) N: s, T0 `
{2 b" ~: F8 _. x1 v; d) ^" h% P
printf("%02X-", pIpAdapterInfo->Address);
0 o% ~( K7 B& g" e$ j. M: }- c' t) N }
+ f9 z, ^/ l7 ^7 W0 U& p else6 ~' C9 Q, t# l# ?; s9 H4 u* Z \
{
0 h% k: `9 K2 z4 B/ l printf("%02X\n", pIpAdapterInfo->Address);9 \: ]1 a7 W- h
}9 w) S: @% Q. L& w
cout<<"网卡IP地址如下:"<<endl;- V5 K- C* U& d+ C) k; u" u
//可能网卡有多IP,因此通过循环去判断
7 h$ A& H! h2 Y6 ]. d6 h& K IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
. h) ?8 Z- a3 y: c$ m+ p do& r6 ~2 s" @4 M# z
{7 ^: F1 S6 d U2 u/ v4 m+ p- a' a
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl; }" Q# V- L! O7 K% i* U
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;0 N9 `6 P, T; m( D5 n& |
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
& r- Z5 V/ _2 S- J! z9 d cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
; i7 _- A3 k& ?" \5 E4 h pIpAddrString=pIpAddrString->Next;4 }5 v/ k. G3 U. O/ R: `+ i
} while (pIpAddrString);
" T8 ~/ x6 C) p1 D) t# e pIpAdapterInfo = pIpAdapterInfo->Next;/ s% A3 w* H) x: d# _: Q# m
cout<<"--------------------------------------------------------------------"<<endl;) |. | N0 ]. S
}8 t6 Y, i0 O4 u
$ L' c6 D6 ^% M
}
0 k% J5 u* k0 C7 O f //释放内存空间. {. e6 N5 T k/ }4 o- {
if (pIpAdapterInfo)
. h" I% N( L5 A( M( u% @* C {$ [/ K% T- j( j; d
delete pIpAdapterInfo;
" z9 K. X; i" M9 u! D }, e4 A/ r; W; T1 x3 A2 K0 T/ l
- x* R9 y# ~; V return 0;
' t% k3 N% l$ x; i% `}
9 [0 _. q' Q1 C' A4 w O" |! I+ n! K r4 V6 F: f# ?" e+ I, J# J. o
|
|