|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) ^3 t+ a- y: A# k, k% r6 w- x: s; n) O j4 ~
9 K' v/ K) l7 _* s* y. r( r: l// 头文件包含5 m9 E+ o, {$ M# d7 {9 n! @/ Y
#include "stdafx.h"
h' t$ C) @5 N2 K7 A9 u9 S9 F* H#include <WinSock2.h>
& G3 J9 }8 `% k' V, d- u% i. D#include <Iphlpapi.h>' _( m* h9 ? ?" T3 o
#include <iostream>
! h- ?# X, z! e s, eusing namespace std;6 w" F8 N' @4 Y
// 函数声明% _ u* s) b$ A$ v4 t6 M7 _
void output(PIP_ADAPTER_INFO pIpAdapterInfo);/ v; J- h P/ H/ U. C- m8 y9 r. v
// 程序入口$ I G1 E* I X
int _tmain(int argc, _TCHAR* argv[])4 c9 }$ f R( C9 c; F- ]2 `
{' d% C4 R9 C% B3 @
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息3 f& l" r/ j+ c! ? ~5 ]. o
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();* M5 u; B$ X+ ~8 J: ?, s3 f' I& f
//得到结构体大小,用于GetAdaptersInfo参数
; u7 _- V6 c% y& _ unsigned long stSize = sizeof(IP_ADAPTER_INFO);
9 O; @1 ` _2 |! c7 c //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量" z* @ O7 ?% a6 M
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);! Q/ A! o7 H1 G% |
if (ERROR_BUFFER_OVERFLOW==nRel)& Y: G9 [! z' e u2 z' v
{: J* J4 I' p i
//如果函数返回的是ERROR_BUFFER_OVERFLOW
7 y# y5 ^4 R8 I: [0 C& u //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
& g4 B+ T5 i( T$ J. b5 `! ? //这也是说明为什么stSize既是一个输入量也是一个输出量$ \0 o! b; |7 q) |1 H8 _- H
//释放原来的内存空间7 G+ g/ O6 ?! R9 Q
delete pIpAdapterInfo;& j: O8 u3 }4 Y9 M! Q/ l
//重新申请内存空间用来存储所有网卡信息
# q/ U( h C3 Y( v) S, I pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
# g4 q; ~/ Q2 P' L. n/ f //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量6 U u. @( C4 a2 E/ `% B; r7 e
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 5 X$ k- F2 s( K) a9 s
}& ?- I/ P% ^" Z
if (ERROR_SUCCESS==nRel)
- J; e. h3 t8 x( f! u {& t6 b- g/ M- P
//输出网卡信息0 q% _/ `" Y4 H7 y# ?: y9 a
output(pIpAdapterInfo);( C; X- [: {; T& u% ?9 l. c
}+ b7 S4 n1 D$ z0 \
//释放内存空间
" o2 a' [! S1 ^ if (pIpAdapterInfo)- a% C+ c/ B# @
{+ s, z1 W. d4 N, O N6 M
delete pIpAdapterInfo;
, S) _/ U7 w0 E9 V, S9 Y }& I) z% l! r5 X. h% P& ]$ \" @" V
getchar();! R6 o3 L$ Y) _; X/ f; V
return 0;. x- I9 \* ?! G: H! P" r. t
}4 U/ D9 { D s* _( K" u
///函数作用,输出网卡信息
5 B/ |$ F' Y( c( {void output(PIP_ADAPTER_INFO pIpAdapterInfo). R) l" H) O' \- c# L" `; t
{
/ c9 _ P. K2 q" m //可能有多网卡,因此通过循环去判断- y8 |' g3 J( I3 p
while (pIpAdapterInfo)
' F& U% o1 C1 V8 v J+ I+ A1 h {
) w; h, t# n" Z, i8 A cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;0 y' u- i; B9 j4 N. H
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
0 M; N5 P( w N$ G cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
) g6 _% G- j/ _; G, H for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)$ _. w6 n( J1 e
if (i==pIpAdapterInfo->AddressLength-1)
4 w0 ` H& f! t% v) {6 P! H {
: u7 i4 L+ ~) e& j" b* t printf("%02x\n", pIpAdapterInfo->Address);
- e4 I" o% z8 s( g2 c }7 B2 p! u7 d: h# j6 f7 D
else7 h# d1 j; e7 P' ]
{( S0 x( g7 m7 {2 |' N7 A- c
printf("%02x-", pIpAdapterInfo->Address);: | _7 V6 o( z/ w$ g" v
}
+ L7 U+ j7 g: D& q% s- j cout<<"网卡IP地址如下:"<<endl;
* p1 y( G4 a' v3 H //可能网卡有多IP,因此通过循环去判断; T9 f Z; w. L0 o" w/ n
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
% i2 \* `' Y5 x9 m do
% u$ C' P5 o' ?. K- g {
) i( v6 s6 ^6 C+ F cout<<pIpAddrString->IpAddress.String<<endl;
/ `; e5 q: r6 V pIpAddrString=pIpAddrString->Next;
7 w' ]3 `* ]* W& E- s* c } while (pIpAddrString);# b; V0 r- p1 [9 N
pIpAdapterInfo = pIpAdapterInfo->Next;' @/ G5 m+ l+ @3 |& N& j
cout<<"*****************************************************"<<endl;) c! }5 a Q6 z! ^4 g
}8 x2 t3 F+ D# i `! n
return;/ V; }4 w' n/ T; _/ U2 v. }
}
' |& u+ C( W1 S3 d. K1 p |
|