|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>$ M5 w- w# T" I% _/ |' l& L
#include <Iphlpapi.h>+ c! E/ {! q0 L) B. h% b
#include <iostream>
. E8 q# R) A; M! D4 G. nusing namespace std;, A3 w' @6 E2 S: ]5 l* @
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库# V7 B- ^. W2 q8 [) _& \2 C
$ R! J A# ^' u# N6 y
int main(int argc, char* argv[])- K3 M0 X+ w" q1 H) n7 m: D* G$ l
{ D; w& A3 i! I
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息* o5 i* x( \) W- s
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();" {2 X5 o- `1 Z7 ?- Q* g' O
//得到结构体大小,用于GetAdaptersInfo参数
% g( C; F H j% z9 Y unsigned long stSize = sizeof(IP_ADAPTER_INFO);
\7 r) [! g& f X* l6 [ //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
! X1 ^/ E, j& O& G1 ?( q( u int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
. v A0 b& R/ `* d3 r //记录网卡数量. v8 j# g# l. ^ Y+ b s6 y
int neTCardNum = 0;
" q. S" z0 c# ~$ \ //记录每张网卡上的IP地址数量! }% O; u, F0 p
int IPnumPerNetCard = 0;
2 a# V5 N0 r2 N$ a" _+ i2 j4 O' M if (ERROR_BUFFER_OVERFLOW == nRel)
D6 ~" \9 N5 M1 X1 x7 i {
6 d7 j/ V ^% r/ `0 o' j //如果函数返回的是ERROR_BUFFER_OVERFLOW
/ y n+ ?$ L* z+ t9 S //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小, x9 _5 |7 N$ i4 E5 q
//这也是说明为什么stSize既是一个输入量也是一个输出量4 E: X, L6 g5 u
//释放原来的内存空间
2 H$ y; Z0 y, V" J* a delete pIpAdapterInfo;% c3 d% Z6 v2 }1 O) @
//重新申请内存空间用来存储所有网卡信息' O5 A0 R0 x1 T
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];5 H+ \ R3 |7 z- h* F9 A9 [
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
" b2 y" M5 `2 E) C/ U- m nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 6 c3 F, m1 X1 D6 s9 a% [
}4 W) E% L! s' |: H" s
if (ERROR_SUCCESS == nRel) n- \/ Z" X6 E! j0 n8 I
{* n7 P! _* T. G
//输出网卡信息+ k3 Q9 v9 b3 ?4 Z$ N
//可能有多网卡,因此通过循环去判断4 o" I$ _# k& W% M- B1 y, \, p6 q
while (pIpAdapterInfo)
2 V1 ?0 m2 U% d; q, Q; ^8 c {: ?; G) b7 M3 m2 r8 a
cout<<"网卡数量:"<<++netCardNum<<endl;4 ~3 G9 ~( G; g% y1 e
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
1 {' F) i& i) f' i% ]; \ cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;* k5 Z' D& @" m0 t+ J \ x
switch(pIpAdapterInfo->Type)& G+ G5 {$ P, h9 C9 u/ t: h$ B
{- K# G2 ]9 h1 L) d' Z
case MIB_IF_TYPE_OTHER:# G( A) T' N$ H3 P0 ]# p: F( u
cout<<"网卡类型:"<<"OTHER"<<endl;# E3 ^/ w2 T) X/ o
break;/ G4 t9 i/ H. u! n1 P2 @- ~
case MIB_IF_TYPE_ETHERNET:
. P v. t5 A; J/ v/ ^+ y cout<<"网卡类型:"<<"ETHERNET"<<endl;) f9 g7 {* Y9 I
break;
) t3 L0 l! a4 H$ @2 b1 t/ T case MIB_IF_TYPE_TOKENRING:
" P. R: G8 x3 z1 { cout<<"网卡类型:"<<"TOKENRING"<<endl;
1 z. g5 I) n* O5 O5 t break;( g2 [; l" J1 |6 y5 S
case MIB_IF_TYPE_FDDI:# e$ i. A) Y/ N( t7 V
cout<<"网卡类型:"<<"FDDI"<<endl;4 m$ v' L3 t1 y& F; M# t; Z" [+ c/ }
break;
$ A7 Q" @5 Q$ _ m case MIB_IF_TYPE_PPP:
( T& n$ O- i! k# b( v W printf("PP\n");
5 y- _7 l' a8 N, J cout<<"网卡类型:"<<"PPP"<<endl;
, }3 K. E- m! b$ J- ^9 f: W$ \+ a break;( h$ y1 a' y/ o* t7 n$ c
case MIB_IF_TYPE_LOOPBACK:$ I! o6 t4 L' t
cout<<"网卡类型:"<<"LOOPBACK"<<endl;$ X9 t/ h, U- q/ _# t9 A' a
break;4 ?1 w; |* I# `/ }
case MIB_IF_TYPE_SLIP:
5 y9 s% X& c% H, A/ S cout<<"网卡类型:"<<"SLIP"<<endl;
; J( K& b3 @! @! ~+ P+ H0 ~# f3 k break;5 h- b; L. V* D; `6 L
default:
* f. x7 m" D- k% v3 C3 K2 O: Q8 c- w2 x
break;
- z* Q6 X. t3 X N+ l }6 N* u% B1 P; M: |' a$ [
cout<<"网卡MAC地址:";2 y k8 z% R& Y, v$ y' p
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
& N7 G D% U. P1 s$ C, ` if (i < pIpAdapterInfo->AddressLength-1)3 T+ Z5 ~0 e1 E& G, I
{
* ^0 A' I/ e* t printf("%02X-", pIpAdapterInfo->Address);
( ]7 s/ {7 Y0 J, f& Y7 H- u }5 L1 b- [2 }. N
else
& l2 i1 N5 t" h; c. `! I {
( C! m4 o8 c6 W9 B) E& } printf("%02X\n", pIpAdapterInfo->Address);
4 b0 i/ y: |3 T, d [8 J( d4 y4 q }' X& m. m; h% t
cout<<"网卡IP地址如下:"<<endl;
) ^" g; `, [% x5 M$ E //可能网卡有多IP,因此通过循环去判断4 o5 d. y" b- J: Q
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);9 ]8 C9 n4 Y$ O' U6 R8 ~: F) D( J
do
8 B, U5 D( y3 n! d {
' w; J4 r+ A: R8 G cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;' ~5 p4 w8 ]. W
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
1 ?/ x# `/ @5 R( F cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
7 M. x" ^* G) I cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;. I" ~! l7 ?, e: d5 N. I- W! Y1 d
pIpAddrString=pIpAddrString->Next;9 O7 e" N" A6 N J
} while (pIpAddrString);" N- {$ o2 u2 L+ b: [4 t
pIpAdapterInfo = pIpAdapterInfo->Next;
2 s+ C8 c& e0 U X9 v2 v cout<<"--------------------------------------------------------------------"<<endl;
# p( k% g r0 m1 O }
& y4 c, e. [: ~9 x" K! k9 _) Z ; Q( O8 |/ D6 I
}" }( v. n$ h$ j+ A
//释放内存空间% j# F; T# ]0 B5 a( K3 E% X' M3 {, E
if (pIpAdapterInfo)
1 x* s% @- e- `1 c {: @. Q+ o: A# G, J, a* T
delete pIpAdapterInfo;
, h2 ]% b P/ W/ U }4 J0 c# K/ B' A9 M& ~5 X, p
9 W' k) b1 |$ v return 0;
$ x; h% z9 b3 j/ P}
( W, H! d0 }! k' u& J% Y: [* v! P9 S5 n/ W% c: W# B
|
|