|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
( f( X8 l7 v$ ~% E+ u( X
1 A6 f/ l7 C6 N* q
, _$ B5 n5 g: I( j+ s% C// 头文件包含( w8 z& Y2 T1 G3 P; W( l
#include "stdafx.h"
1 Q" Y* F: G$ Q#include <WinSock2.h>
$ |7 x0 L2 E4 d$ q9 J#include <Iphlpapi.h> ~6 k) o' q+ G; N3 C9 h
#include <iostream> E/ M7 Q$ O; h9 o( R
using namespace std;
- e2 H/ z: F; z// 函数声明
9 |3 g9 y* v8 o5 l: ^void output(PIP_ADAPTER_INFO pIpAdapterInfo);
# B- M3 @1 }; c// 程序入口$ V( s- b) C) C( ]4 R) A9 U
int _tmain(int argc, _TCHAR* argv[])1 S) _7 R! a3 [, e6 e/ F
{
/ l) J7 b; ]" |1 E0 d- Z //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
* B: E# [' ~2 y9 v# O- {' u PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();8 f) y- [) K/ {7 L8 R. A7 |7 E& R
//得到结构体大小,用于GetAdaptersInfo参数3 K6 `& ^6 R- i+ V
unsigned long stSize = sizeof(IP_ADAPTER_INFO);! R8 U B6 l# T1 Z4 b2 u
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
& g& U* ^2 ^. O. F% [2 V [ int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);- G: L6 z; r3 {, W
if (ERROR_BUFFER_OVERFLOW==nRel)! f, t, f* A- o4 N7 K1 p: D
{
& q; c/ {7 v- v; o8 P' ] //如果函数返回的是ERROR_BUFFER_OVERFLOW- k- U" I% q( V' F8 c- C& p' @+ ~5 D
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
+ P3 S( a1 l2 X- @ //这也是说明为什么stSize既是一个输入量也是一个输出量# ^4 I F$ R4 O' e/ ^
//释放原来的内存空间1 a4 _6 F* B- @0 B: Q3 [1 k
delete pIpAdapterInfo;& w5 A/ j0 B& W3 l
//重新申请内存空间用来存储所有网卡信息7 c0 b: T+ m5 r( j* G( L
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
" x: } d4 b) ^4 N$ p //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量1 V2 B8 T$ ?, l
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
% D) J7 F! ^) J# I) j; f: x/ B }$ `3 N3 Z: p1 b% l+ h3 d
if (ERROR_SUCCESS==nRel)' ?+ V1 |8 w0 Z, W
{
. [$ X5 d* h! b //输出网卡信息
0 d" `6 N; }0 j! o% a5 A output(pIpAdapterInfo);$ H; b8 W/ ?5 Z1 b' }9 V
}
% g! q6 p$ j5 o+ i7 ` //释放内存空间
: v, L5 I: L @4 s; w if (pIpAdapterInfo)
, y- j1 `5 R" m2 G8 g {5 U: m, A* R* x4 X7 |# a9 c5 J
delete pIpAdapterInfo;
) Y6 v& n# m: d( @# ~0 s }. u" V$ `. V3 s/ n* R9 C
getchar();
* ^1 Y6 t* c+ u( _4 o6 F, S return 0;1 Z7 T3 y+ a* H% e& H1 A
}
% m6 S# P+ {) N& l$ s5 M1 d///函数作用,输出网卡信息: ^/ p$ l% @$ u2 `
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
# ?* D. R" }3 N( B+ u{
: ]( [" E+ b3 z* I I //可能有多网卡,因此通过循环去判断
; l( G! |; Y G# N& Q while (pIpAdapterInfo)" v# v5 s( J: `* [/ T9 B! d7 s
{
* M n* h: \9 R( e% J, F' x0 } cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
+ R9 y4 S5 c L# [ cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
- ^* a# p2 T' _1 V2 E: @ cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;0 f X$ \1 a8 ^. P
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++). z7 c" x& V1 v1 O
if (i==pIpAdapterInfo->AddressLength-1)
' s* a1 M; y) L) D/ U- U) B {
2 d T2 {5 W6 ~- [! S printf("%02x\n", pIpAdapterInfo->Address);
% J: G, j$ z' P7 D4 o' `% s$ M: [ }
8 x1 C# q& W7 g7 X1 ]0 r else: L: Y1 \) S) {$ |3 h/ [
{% @5 a) u' }. F
printf("%02x-", pIpAdapterInfo->Address);
6 M# a; |3 `; z; K }" U* H+ N& I* M8 m8 |
cout<<"网卡IP地址如下:"<<endl;* f0 s6 G5 X: R
//可能网卡有多IP,因此通过循环去判断
# F- f7 c0 |, @* r, e8 |0 a# a0 }. k IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);3 P7 ?* S8 C* Z( p
do s& X9 R. _! i# x( |
{. I! T# N6 c4 \
cout<<pIpAddrString->IpAddress.String<<endl;9 V# Q7 E" V: K
pIpAddrString=pIpAddrString->Next;- a: d- |& m! w1 K' y, k
} while (pIpAddrString);& B+ C6 U6 Q$ \0 F
pIpAdapterInfo = pIpAdapterInfo->Next;: W* N: z- g7 p2 a9 I
cout<<"*****************************************************"<<endl;1 b& Z* f- r/ o' s
}! ^7 A" K! s$ @: H9 [ B' D
return;6 U( d) @8 a0 a D
}9 C( E. N, g( n8 g( J- L
|
|