|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
* Y$ ~8 P3 w( u+ E$ L) J7 _* |: c#include <Iphlpapi.h>8 y4 p7 V( j0 t) K2 _' F
#include <iostream>5 j" m* I) ?9 W8 q! r; |8 Y# D; E
using namespace std;
+ [* n9 j2 X5 Q e' x#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库6 V0 V: }" z2 [9 }
5 Q( q% d; r- K9 [% [int main(int argc, char* argv[])$ {8 L( q6 I3 S) g! ]$ p8 R
{( f4 o9 L: ]6 ?/ `: m/ _, |; @* V
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
- }& F; `* r' c8 v; f PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();2 Y$ m" l0 Z4 k2 g2 H
//得到结构体大小,用于GetAdaptersInfo参数
) q8 T% i7 y4 u" z! j: r unsigned long stSize = sizeof(IP_ADAPTER_INFO);+ o* {6 o. [% b0 b# U* P
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
2 ]" H" m; A; ~ M int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
4 H: }$ s) R/ v. { //记录网卡数量
6 {0 ? W4 J/ M int neTCardNum = 0;
' H1 j% }. ?! b' x) @ //记录每张网卡上的IP地址数量
; F- o' [9 ?* c int IPnumPerNetCard = 0;
- U. z* z' S5 t- K, P( s- v if (ERROR_BUFFER_OVERFLOW == nRel)
- O: @2 J9 }: H1 O* @ {
/ M2 c7 f. s% P& j6 E$ I //如果函数返回的是ERROR_BUFFER_OVERFLOW5 ^1 \: p& l9 l6 M; D
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小5 L! L9 i" U# R K3 [0 }4 w& Y; J" o
//这也是说明为什么stSize既是一个输入量也是一个输出量 S- S, V& J* O1 s# [% U9 X, [3 Z
//释放原来的内存空间
1 s$ y$ i( m" u+ O: S delete pIpAdapterInfo;5 L4 F) {& G- a- u: C1 h% B
//重新申请内存空间用来存储所有网卡信息
0 u; d& r4 p& o6 N" K% ]! _ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];8 z# ]! E6 ~7 D: K! ~/ ^
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
+ d: r3 |; C0 O4 r' B nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 4 f/ t1 E6 _$ H) A1 K+ A6 I
}+ L4 ?, c0 i) _: C- O% d
if (ERROR_SUCCESS == nRel)
) ]: y2 J2 y9 s) h# A {) o2 z, P- a7 @; v- T: _. F! N
//输出网卡信息, s; F* ^) T1 j/ _
//可能有多网卡,因此通过循环去判断# f" f, v% i, a9 h; p
while (pIpAdapterInfo)3 p( S8 l' g \$ r1 _! N
{/ x \% F9 c2 x+ q( y
cout<<"网卡数量:"<<++netCardNum<<endl;
, Y" ]' y7 h- Y% K6 p r* y# @ cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;* R7 g9 f6 ~8 s
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;1 \9 |* B+ F- X7 N2 K3 W
switch(pIpAdapterInfo->Type) K; e* j) |+ c( @, i/ o
{
0 c4 K' j4 P5 A a case MIB_IF_TYPE_OTHER:
, x6 ?4 L }7 K cout<<"网卡类型:"<<"OTHER"<<endl;3 l+ ^8 A; i9 F
break;
0 D2 }5 O; w7 B0 |# \: W case MIB_IF_TYPE_ETHERNET:3 z0 D# i8 Y# b. W+ u) j% c
cout<<"网卡类型:"<<"ETHERNET"<<endl;, _& Q! d4 Z% s w, R* ^2 v# j
break;
/ x+ m. h( _; X7 n( T case MIB_IF_TYPE_TOKENRING:
- w f% l' T2 Q9 h& F cout<<"网卡类型:"<<"TOKENRING"<<endl;5 c* J% z L3 y+ m. @1 d
break;
0 l3 T) i( L. O' k) k" m case MIB_IF_TYPE_FDDI:/ D: L# h- U6 g2 q; H
cout<<"网卡类型:"<<"FDDI"<<endl;
" ~8 N# M% g% e% y1 w5 \0 s break;
8 j. f# e: R/ y, Y case MIB_IF_TYPE_PPP:
% V2 ]; I: l+ h6 G3 }- w printf("PP\n");
) }( s: }# h& z) {; m% a4 L$ a* w cout<<"网卡类型:"<<"PPP"<<endl;" ?: d9 n0 i+ L3 [4 M
break;
. d3 m4 ~8 l+ t2 i) f4 L' }' { case MIB_IF_TYPE_LOOPBACK:
' N% R" g/ `7 N) p" f2 d9 @. ^ cout<<"网卡类型:"<<"LOOPBACK"<<endl;& u' k7 y3 s/ d( c7 T$ i! M% _, U
break;
9 N3 l, ]6 R/ @ case MIB_IF_TYPE_SLIP:
7 @, ?& F/ g5 Z9 f. } cout<<"网卡类型:"<<"SLIP"<<endl;6 N( t( K* o' _5 s4 z" O
break;. S2 U) Q5 V8 y
default:! i& H/ a2 Z( f1 J
5 }3 i5 A* p( J break;. g. Z8 ]; `% U0 e3 F
}- D" U+ e" }* v" \2 r
cout<<"网卡MAC地址:";+ I% H# B1 X# \* j: @
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)" N, i% d3 K8 s. O8 I! u
if (i < pIpAdapterInfo->AddressLength-1)
% Z1 S4 J) f; m& v( M0 d {
" _+ h1 C1 _: C6 f" n printf("%02X-", pIpAdapterInfo->Address);* d& T( I! B: h
}/ |, z& S( q" s! _3 B! r
else
. X% F& B( J9 F5 O {
! Y7 H0 v* q! p: _+ s( n1 F printf("%02X\n", pIpAdapterInfo->Address);' [) X$ \, x: q: O
}8 Y4 g; u9 ^3 ~! r; H
cout<<"网卡IP地址如下:"<<endl;" q( P1 v D5 D) W
//可能网卡有多IP,因此通过循环去判断
/ J/ n5 E/ c6 P% ` IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
( b/ s$ G& Q. R @4 T# C do
, a$ W! ~( j y$ u {
$ B) ]; U0 q Z cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
+ u# l! V+ F5 h; p9 t( s* Y0 x/ T cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
8 c( s }% _, Z" y1 F* J3 @, a cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
; u7 H2 q7 _) O; c9 u3 d8 B cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
* ?" b2 L5 p6 B& e2 \; b6 d pIpAddrString=pIpAddrString->Next;0 |) F" ?' [3 I( u
} while (pIpAddrString);
) A% x! H- z+ ~0 E; E pIpAdapterInfo = pIpAdapterInfo->Next;) i$ [7 S* T# U! \# H$ a
cout<<"--------------------------------------------------------------------"<<endl;# d% B/ K# K: O1 R
}
+ V3 n/ {' C+ }# S" F4 w l, o ! \6 K* O% f) r* ?3 [% h7 D2 n
}
: s$ a( V, K3 k( k7 K3 P4 q //释放内存空间& A4 ?- O- G; ? e" {9 |) m# B
if (pIpAdapterInfo)- G3 b, p5 N8 B Z
{& [+ p) g; H/ x
delete pIpAdapterInfo;; Z' j- f& z6 q& R5 t6 d
}
) N" G5 F6 D p; }5 |$ x
( d! b! C5 r' t# I( D G' u return 0;. f7 p- k$ k0 I q4 o7 e7 r
}
/ } O' U7 d& _# s. k$ R+ a0 m
! i/ w, [/ x* D9 I) R" s& n; T4 ^ |
|