|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
" t. L9 m P: o; {" t4 p#include <Iphlpapi.h>
" I$ v) t; d) F" Q#include <iostream>) q4 W' [) \! M) y
using namespace std;5 k( z5 b, g* U- l f6 T6 l6 a
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
( Y- _! s7 f! i; O: i6 X6 v9 |: P
4 ?- t( ^- ~1 T2 lint main(int argc, char* argv[])' P6 j/ }1 l- |1 Y0 H5 G) Z9 l' e2 t
{
, \& C' _4 w; X: h& X! J //PIP_ADAPTER_INFO结构体指针存储本机网卡信息9 p: J2 G8 d, ?0 z1 q
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();% h0 ~9 {' b* o6 }
//得到结构体大小,用于GetAdaptersInfo参数
" |3 ~2 x& \; W' n' F5 h unsigned long stSize = sizeof(IP_ADAPTER_INFO);# z6 @; t8 B' ^6 s$ Y) ?# j
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量" j! h, g: h7 Z4 b+ M
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
4 P5 F/ P; U! K) i ^' _ //记录网卡数量
; ~) z' }* b! i% p4 P int neTCardNum = 0;
% T6 H0 ?. N8 I; P$ ?+ x1 i3 H# j //记录每张网卡上的IP地址数量
# |# a7 y" [. L- f/ W int IPnumPerNetCard = 0;* w) `' H3 A7 c; p: w
if (ERROR_BUFFER_OVERFLOW == nRel)
. q# G4 J5 k# h, L! G8 i {/ `9 H" q7 d! q$ z9 D4 v$ ^* h1 A
//如果函数返回的是ERROR_BUFFER_OVERFLOW
7 K% Y! H, b# F$ Z7 Y //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
+ G. P( ]0 P5 H //这也是说明为什么stSize既是一个输入量也是一个输出量9 T5 \2 O" B& Q
//释放原来的内存空间# c8 Z; ^ P: b, q* B4 e
delete pIpAdapterInfo;! \* u( z# y0 j! a ]6 O9 x) x
//重新申请内存空间用来存储所有网卡信息
- ?8 B* ^) E, ?0 u9 w pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];/ f7 n" g7 ?! J/ d7 z8 B3 M
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量1 ^7 ~& g4 o' [: j
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
4 ~3 D# ]" ?7 `# c4 D( Y }
' |1 U; j' X$ P2 j3 q4 L if (ERROR_SUCCESS == nRel)
3 a3 g# q5 N1 n! Q3 \" K3 w# U {
, Q" X9 a* g4 w* p# n9 q6 [ //输出网卡信息! D: Y: r. t% x; I! Q" L
//可能有多网卡,因此通过循环去判断
# b" M: ]) {+ Q) } while (pIpAdapterInfo)- e8 k3 T5 f' P0 c8 d
{$ v* T6 R1 r* q3 _" y
cout<<"网卡数量:"<<++netCardNum<<endl;6 y; }% e4 |$ O8 H% C0 ~# v
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
8 A9 z: D* {; s8 ^1 E" C" w cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
' U/ i9 H+ O: r/ t5 H; X switch(pIpAdapterInfo->Type)! P. i3 c; K5 S# d; @
{
+ L4 Q! a1 j* [% o7 I6 n case MIB_IF_TYPE_OTHER:
" k4 ~) ^1 f) q" v! d3 r) n! t cout<<"网卡类型:"<<"OTHER"<<endl;
* b- `& N( }( ?; P break;. o. }4 v6 U: Z v
case MIB_IF_TYPE_ETHERNET:+ S- ^( _& D0 y4 Z2 B5 G4 n
cout<<"网卡类型:"<<"ETHERNET"<<endl;9 b1 T, |. r9 {7 e) O- |5 ?
break;& Y7 H6 ?; b+ I4 j
case MIB_IF_TYPE_TOKENRING:
- B0 M4 q1 r0 p! B9 |+ Z/ Q cout<<"网卡类型:"<<"TOKENRING"<<endl;# z4 |% w3 j! @. I
break;' b4 S! F* R0 Q$ f
case MIB_IF_TYPE_FDDI:
' G4 \8 h7 I( L& }8 {" c u* z cout<<"网卡类型:"<<"FDDI"<<endl;1 N' n# K; {, ^& N7 k+ G0 V
break;- }6 x+ D! `* t# v
case MIB_IF_TYPE_PPP:
+ k2 l+ Z, f2 d" f+ q6 y printf("PP\n");: ~3 @8 |4 c* {3 k4 i/ t8 R
cout<<"网卡类型:"<<"PPP"<<endl;
# b8 s: d9 U0 ~ break; A' J7 C& \- z9 x( c* w ^" i
case MIB_IF_TYPE_LOOPBACK:! c1 x# t: E4 O' S
cout<<"网卡类型:"<<"LOOPBACK"<<endl;* D* V, O% e# o
break;& b. L# @) s1 X; d4 M# ~. u4 k. L2 v
case MIB_IF_TYPE_SLIP:4 X. W) {, U) v! W
cout<<"网卡类型:"<<"SLIP"<<endl;
4 X; h( C G' c6 h6 V: l break;
. W8 E# Q) f) i. g/ p default:
( x$ ~0 o A$ M$ n. L- t7 N8 F. t' R) a( T
break;
* {; U1 M$ q' M# [8 w }. c( [2 p% L7 X* S: T0 B `2 G
cout<<"网卡MAC地址:";6 L+ t# ]) j: }8 h
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
' v3 S' v; z4 d+ J$ Y% z if (i < pIpAdapterInfo->AddressLength-1)5 j! M% f* B+ U
{
, d, S. z7 _8 @: M printf("%02X-", pIpAdapterInfo->Address);
1 q9 q& ^9 a7 E }& c' ^/ x% |/ b. ]/ p
else+ S3 }/ O% F, _ ~5 G' P+ D, Q9 t
{+ m# j ^; a' n4 J
printf("%02X\n", pIpAdapterInfo->Address);6 l2 _% u. R8 X6 E
}
* W6 J- i p6 l+ P cout<<"网卡IP地址如下:"<<endl;! e, a @& ^9 ` B5 v8 ~0 |! I
//可能网卡有多IP,因此通过循环去判断
" p" W: I3 @: b( _ IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
; J* t- I1 Q0 r( r1 o' s! j do+ H5 n1 b3 D3 Q1 L4 ?" Z
{
R0 a+ H1 f- A7 x cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;# I: q9 u6 u2 T( s, O( ~+ Q
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;, M; m, D; ^- `/ w& \
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
$ T2 m1 V, y# Q, G* _ cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;- W5 H7 n/ F8 c8 S4 L
pIpAddrString=pIpAddrString->Next;
, K: F* ?; X- [: v: x6 v" U } while (pIpAddrString);7 F7 M/ U5 r5 Y* C$ h. S* J
pIpAdapterInfo = pIpAdapterInfo->Next;
# H1 {: W- s' y* T& F( d' n- y cout<<"--------------------------------------------------------------------"<<endl;1 r* Z8 Q! Z9 J8 ^
}
6 L0 k, i4 t7 w# [% o
$ f$ p4 z3 e6 X* L! c* L }
" {/ e' D5 K, ^0 U; q2 K6 { //释放内存空间
* q4 R2 J7 @/ R4 r1 j, B7 ?) ] if (pIpAdapterInfo)
7 I: W) h b! b {
1 o* h: k5 J* b* @0 h delete pIpAdapterInfo;2 M% z# \- M3 u6 h5 h) D1 W
} Y+ I3 W( X- C) X, @: Y
* N8 W% ` L( k' z
return 0;- g0 e4 d- O) n: [5 R5 k
}: O2 \3 |0 B* f5 {" U& b
; b. m5 S3 C4 a7 [4 [4 b
|
|