|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
6 @1 l E3 C. ]: m, a' l#include <Iphlpapi.h>
9 T9 b: b. D& t2 n, E) ?#include <iostream>$ t# ^, b/ ^* z! Z+ j
using namespace std;, X m: F4 `* e) r+ B e4 I, }
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
2 ?3 ]' N- m: X0 P" f1 n; ?; v
$ M0 G0 i# \+ l9 ^$ d! Uint main(int argc, char* argv[])# b+ A8 ~" g2 G/ |
{7 @; G! k5 c* r
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
8 ]' v7 t' p2 L6 U PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();6 E& F$ v1 B5 k+ W' X# }9 y
//得到结构体大小,用于GetAdaptersInfo参数" {9 p7 u+ Y( q. p, S
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
6 H6 C5 Z& c8 k, v r3 Q //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量! }1 ^4 F5 Y8 _- M
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);- A! k! J* s" ^& h. g& o6 q
//记录网卡数量
' F6 Z* a/ {# u/ o3 S5 G int neTCardNum = 0;' }& O; q& ^. b) _9 {7 N
//记录每张网卡上的IP地址数量
1 F* m$ }$ Z9 u3 M+ t int IPnumPerNetCard = 0;
1 T: O1 i* v2 ^& I if (ERROR_BUFFER_OVERFLOW == nRel)
$ W6 _+ F1 q- n- \0 A2 s' H { J1 S2 r, w {$ b* H \
//如果函数返回的是ERROR_BUFFER_OVERFLOW" c8 D- p. ^8 b: z8 X u
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小8 w; _: o" M% l Y- `, P
//这也是说明为什么stSize既是一个输入量也是一个输出量
& C. X& [. U! ^- @! i2 e, l //释放原来的内存空间$ J& N3 b( U: u S
delete pIpAdapterInfo;! X" G/ Q" C1 t' D7 L& ?
//重新申请内存空间用来存储所有网卡信息$ y3 N! G: h" U, {- P& ?8 f9 C
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
7 ]7 u; N; T' X$ x' A' U //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量1 q L1 X% J) K
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
# U4 X1 c' ?1 Z4 f }6 o! T3 D+ `9 K0 O/ L+ n3 u
if (ERROR_SUCCESS == nRel)8 O- S; h2 X" ]* g6 k& @0 i. m8 N
{
6 i( w Z; p7 ] //输出网卡信息
5 M; Z: u6 O( [9 `% E //可能有多网卡,因此通过循环去判断% _; f8 N' I, V+ v( v
while (pIpAdapterInfo)
. f& T/ C. J! Q; }3 g# j1 J8 o {
5 O c2 I: \ } @ cout<<"网卡数量:"<<++netCardNum<<endl;
T* ]) R( D$ @4 b4 Y, T' v cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
; S" v9 E% x# b* ?8 K+ L3 M% K- g cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
" U R" b- c: O; T W switch(pIpAdapterInfo->Type)
9 m5 o& s v, j {
- a0 }2 f m: M+ Y1 S case MIB_IF_TYPE_OTHER:
9 s R; t" d7 H, c. ] cout<<"网卡类型:"<<"OTHER"<<endl;
( c1 j8 D& r* ~( E- i1 F break;
6 z; q7 o4 C6 W/ s" O# A" q. G case MIB_IF_TYPE_ETHERNET:7 `( S [ J0 |( S# @9 f
cout<<"网卡类型:"<<"ETHERNET"<<endl;! I9 Y- @5 D E5 W9 p# {
break;: W% G. |; F# t; s9 u
case MIB_IF_TYPE_TOKENRING:4 I- p! _; D0 w. W n. A0 U
cout<<"网卡类型:"<<"TOKENRING"<<endl;6 A4 D- [0 {4 _/ \# }8 ~
break;8 F. z2 q) O2 T% S; r& Y7 q( n. D
case MIB_IF_TYPE_FDDI:
9 D; L, _- n" o0 Q( I( S6 R cout<<"网卡类型:"<<"FDDI"<<endl;) f2 x9 D2 s6 S7 m2 v( w3 ?
break;) d/ e3 `1 b- o& C z
case MIB_IF_TYPE_PPP:0 M7 z* {* n3 A6 j
printf("PP\n");2 E6 g, r- M0 ]) q
cout<<"网卡类型:"<<"PPP"<<endl;0 H. O* f: @$ K8 C8 K. ~
break;
7 R4 Q4 W. S [& V0 f0 d) c. k case MIB_IF_TYPE_LOOPBACK:
. q/ W. ]' `# |8 g" _/ e cout<<"网卡类型:"<<"LOOPBACK"<<endl;
: y+ n) K4 m- U4 u K* [3 ^9 | break;4 T5 _ T9 Z8 s3 J. W/ I2 v7 j
case MIB_IF_TYPE_SLIP:2 {) l6 w3 [ r. _% f
cout<<"网卡类型:"<<"SLIP"<<endl;( ?/ g0 E# U- l- D5 [
break;0 Y0 M" Q P2 H! h! ]+ ~
default:
7 T& W3 S% ~7 r7 m" s, B' j. R9 g! V k( v
break;1 n) K. ~" Z2 \, V
}
9 c1 T& Q4 o( u. z( G; C, E8 r cout<<"网卡MAC地址:";
% @1 q( [# z4 C' \! b( L for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
: g9 k: l P4 i3 H" r0 P if (i < pIpAdapterInfo->AddressLength-1)
- A, T1 N$ {4 {. c5 ^ {& ?" |1 U6 Y7 @& i
printf("%02X-", pIpAdapterInfo->Address);; L' Y; I8 s+ Y5 _2 E6 K/ v
}
) @7 N: i) D/ y& K8 F4 w0 U else8 X' V1 r3 f4 b/ w
{
' R# L1 Z" p9 c0 m printf("%02X\n", pIpAdapterInfo->Address);
" d$ m' S! h& a0 d# g. H# ` }: c4 o* B: B; |
cout<<"网卡IP地址如下:"<<endl;2 I: C, U; L7 \# ?4 \% }/ C, m
//可能网卡有多IP,因此通过循环去判断0 ~1 d1 U. F2 M8 ], b
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
( Q5 O* @: y6 K. l5 I& w do; x1 c- q1 A! b3 q
{
# B M( H2 \& p% L* `7 s1 J t2 o cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
, r/ h: B8 _: r cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
2 L3 N/ J5 Q' S" n cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;, D [/ T% f _3 \8 e5 F7 a4 q
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;, U" D0 Y0 X; @
pIpAddrString=pIpAddrString->Next;
9 u h/ x" }" }( @ } while (pIpAddrString);
% |& |9 l/ i' L! w0 D pIpAdapterInfo = pIpAdapterInfo->Next;
8 _" h! V( i: J2 E/ R8 A cout<<"--------------------------------------------------------------------"<<endl;9 L! G- M. n [% |' ~
}8 m7 p9 o/ |: r+ N% K; w/ x
: \4 X" S: _% a! J$ W7 C
}
' }- K: K- e& d. L O6 Z7 K //释放内存空间
. B, K/ `; @9 f' a; t if (pIpAdapterInfo)) g. M; S/ `5 E2 |7 c- x! n
{! K: X+ P/ A8 a
delete pIpAdapterInfo;
5 F- Q! k6 k' G; Q }% S1 t" q2 D% E
' ~+ _$ M. X" B return 0;
* F' ^( {, ^+ I9 P}
) z+ H" {" i. r2 w: z
0 d' i( v" [+ `7 u |
|