|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
: U2 g* p' \& s8 w# g#include <Iphlpapi.h>
( c# f9 o" L5 P! ^& a4 z; @) {#include <iostream># _4 m5 X; r K
using namespace std;. ]8 f) Y) m- J: v' y! O
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
3 p( k' A+ E, F# c8 g+ P7 h. q4 u Q
9 s* `9 w" O; l# A+ d# tint main(int argc, char* argv[]): `: L& x9 G1 q' E- e+ E1 E
{9 A% [! X) ~+ |8 t6 F
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息' w4 j, p) g% s
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
3 C, @) [0 n( i2 A, g7 l7 l //得到结构体大小,用于GetAdaptersInfo参数
9 ]8 g+ k- k& } unsigned long stSize = sizeof(IP_ADAPTER_INFO);
. i/ k i3 {0 Y+ |' X5 d //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量" w( F- B. ]8 W1 p* e8 R
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
+ X% M( Q' B+ h- m3 ?, a0 p //记录网卡数量
3 A" K0 l- G6 f; j: d int neTCardNum = 0;% w. ^2 j0 J4 A# ~- f3 K
//记录每张网卡上的IP地址数量
; T; o4 u; A, \" G int IPnumPerNetCard = 0;/ I+ S1 O% [4 N
if (ERROR_BUFFER_OVERFLOW == nRel)
" f9 _7 [( X. n: M {
o' K) I9 ^5 m/ S- ] //如果函数返回的是ERROR_BUFFER_OVERFLOW$ a6 W. @" K' z0 v( {* h. |
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小4 Z: `' L. J# I! ]+ ^* J& T
//这也是说明为什么stSize既是一个输入量也是一个输出量
5 l. r8 U% V7 M1 _2 B7 N2 s //释放原来的内存空间
4 y3 h" ^" G3 i' b6 [, r: {3 o delete pIpAdapterInfo;
# W+ E5 p' ]. p8 M0 X$ K" r7 D //重新申请内存空间用来存储所有网卡信息+ z( s2 b b( Z
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
" [ ]% S s3 [. k+ t% n% o& \ //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量- N7 c5 @- I2 X+ U
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 3 e8 n5 l+ E) u7 I6 T2 \- x
}
1 }" n7 H9 r( o/ b+ Z7 s% p% g2 d m if (ERROR_SUCCESS == nRel)" z1 m7 s" ~6 M1 ~* t" c
{
7 u4 |# K9 U o0 e* D, ~8 H' y //输出网卡信息
6 U9 k8 `- U$ f: v# ^+ J! z //可能有多网卡,因此通过循环去判断1 i; p! Q& W5 T8 @$ @7 x3 K
while (pIpAdapterInfo)
4 \. ]# x" q7 T# x- Y4 p( R9 d {
/ A ], Q3 r$ s1 F' q+ r; e cout<<"网卡数量:"<<++netCardNum<<endl;; l1 t: Z" u1 H8 ^+ y6 r# t1 U; g
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
6 X! U' E# F* [+ @ cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;" O" n% D ~% \) x& \/ L! X
switch(pIpAdapterInfo->Type)% a' T: F7 o+ \0 F2 B& }
{
( B p/ d2 ^- K& O" K+ f: Z case MIB_IF_TYPE_OTHER:1 k _* _% t( b. E9 f
cout<<"网卡类型:"<<"OTHER"<<endl;3 Y1 @3 ?( U; R" m- T
break;
: g T7 @/ ?" K ^1 ?4 c& R case MIB_IF_TYPE_ETHERNET:3 j- @0 b$ d3 |' [2 q5 U8 O
cout<<"网卡类型:"<<"ETHERNET"<<endl;9 o1 n# Z" @( w- I
break;2 m* f7 ]# Q% [3 C
case MIB_IF_TYPE_TOKENRING:
! X! T% G$ N2 g4 L \ cout<<"网卡类型:"<<"TOKENRING"<<endl;+ i' o6 c( t: A# @, B
break;
+ Y7 J# S2 @$ F' h; e* ]! p9 ] case MIB_IF_TYPE_FDDI:
& {( D' I( W) }( a5 j. `$ S cout<<"网卡类型:"<<"FDDI"<<endl;
( @9 _8 R5 V) Y break;
9 [ T+ l0 _5 L5 V( |0 E; j case MIB_IF_TYPE_PPP:
0 h: Z8 M% Z5 b! R printf("PP\n");( ~1 e, I! K3 F$ i. @4 c
cout<<"网卡类型:"<<"PPP"<<endl;
2 R6 S$ e0 e/ {. n; u" `7 ~ break;7 N0 {2 T0 m6 E0 m5 p4 q& k
case MIB_IF_TYPE_LOOPBACK:
- w3 u9 K; r6 P2 {: G+ ?0 Z. h/ T cout<<"网卡类型:"<<"LOOPBACK"<<endl;
q& T8 Z0 a0 v1 S; s break;
2 w' b. E4 Z. J1 S0 o case MIB_IF_TYPE_SLIP:* \) h; Q% B2 ]1 p$ X z' o, B& ^
cout<<"网卡类型:"<<"SLIP"<<endl;6 a' A, B4 v- r, h- i
break;
' l! r3 }3 R1 H' j' l, w$ q) | default:
9 Z7 ?6 b9 `/ V2 a& c
. U& D) L- m9 h) G" @ break;
6 L {: C: x. u. Z }
! _$ r1 E& D H0 p6 x0 ~3 M cout<<"网卡MAC地址:";
! [, a. R4 W7 G. O" R+ z I for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
1 I' J$ M0 ]" O( e# k7 a4 M if (i < pIpAdapterInfo->AddressLength-1). O7 z( b* c6 V# ?" Q/ Q8 H
{" ^% ^! l' \2 ]& Z4 Z) x
printf("%02X-", pIpAdapterInfo->Address);% [( P$ I% t; f8 f# {/ D6 v
}
, |' {3 T1 T* ?2 D% u0 A else6 X/ U2 L) a. E% Y
{6 Q0 H( q" w, J9 v
printf("%02X\n", pIpAdapterInfo->Address);
7 ^" L2 f5 S2 V: d8 h+ F( A }
- {2 D% y. i9 z; T1 K6 h7 { cout<<"网卡IP地址如下:"<<endl; F# e, _$ I8 A6 D" I) S
//可能网卡有多IP,因此通过循环去判断" L/ e8 o7 ~/ U/ g
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);( O, h6 V- ?% N" A# ?/ d+ V
do) L- D; L. U/ d8 K/ t; f6 S7 S
{! {4 e5 f* [8 ?: Q" i- F
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;9 j: H G+ [) S7 s v
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
9 ~" b+ \' Z+ k, N cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;3 V* ]8 B( Y: [: S: [- W
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;1 w, h; F% }' C9 c: h* g7 Y
pIpAddrString=pIpAddrString->Next;
( |! T1 x2 L: z } while (pIpAddrString);
7 [1 E0 A# r" U9 w9 k pIpAdapterInfo = pIpAdapterInfo->Next;3 X& }" j6 V* a/ q: o
cout<<"--------------------------------------------------------------------"<<endl;- B, h7 c& x5 s3 K4 \$ j
}
h6 z2 P9 d: R6 _, x4 i! A3 j: w
" b2 O3 T2 ^1 X7 i }% j' m; S' S) L% R
//释放内存空间# z6 D, Z: _% p& S* k' g6 q
if (pIpAdapterInfo)& v B Z( g2 D3 }
{
' b7 U& B/ M2 a; `0 U/ S delete pIpAdapterInfo;
2 ^4 E" }* t1 z0 E; F/ ]( }! N/ D }: k6 V+ q- w1 [* O- ^$ ^
# U: K: R- Y( S. }; V return 0;% G* \# r1 X8 `
}7 b( j4 ?+ p0 E
! l6 V: \* R' W4 t Q1 W
|
|