|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
' F6 M' \( k- y D5 b' G S$ D3 U# d) ^' f/ k6 F. `
- M- r! Z- @$ \/ p
// 头文件包含
, |3 n& f( X9 Y3 c9 i, d$ L: r" E* |#include "stdafx.h"- z: C1 }. G! m
#include <WinSock2.h>9 C: j( {- V- X3 ]
#include <Iphlpapi.h>* \# [8 J0 c* q! y
#include <iostream>
+ H4 }/ f1 w4 p9 kusing namespace std;
, `4 s" Y6 L: F. w) U" y// 函数声明
9 g# X i! E" M) X4 fvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);' [2 k# `# G u9 O4 b* ]
// 程序入口
7 ^" |. @: T: F; Gint _tmain(int argc, _TCHAR* argv[])8 N" z1 _; P- n) y! e9 {* ~" m
{+ c3 u' N7 [* E
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
0 f# `& U+ E6 P6 k- u3 e& a PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 Y5 V, K& B4 c //得到结构体大小,用于GetAdaptersInfo参数
- l- s& F, U( J( ~8 {! G! k unsigned long stSize = sizeof(IP_ADAPTER_INFO);% P6 G) N' u& x5 j& _/ y& d
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量, k: O- I! Z! s7 a3 b! L7 q
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);5 d" p0 V# r a
if (ERROR_BUFFER_OVERFLOW==nRel)
. N3 @! \* T4 \9 @4 N; y( h {1 A+ r0 u; _1 s: a4 \
//如果函数返回的是ERROR_BUFFER_OVERFLOW1 ~7 R- p8 h s/ ?3 ~& _
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
8 J/ @& T0 F+ y) D6 _# [ //这也是说明为什么stSize既是一个输入量也是一个输出量
+ \) x: O, Z% s* } //释放原来的内存空间/ D6 B5 F7 w3 H3 v% t
delete pIpAdapterInfo;! j! O6 c) ?, N1 O; ]5 E
//重新申请内存空间用来存储所有网卡信息
: a) w, a, L _+ O7 f! n5 A pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];4 t. Y9 { v7 } B8 f8 ^) J \
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 Z- L) Q6 Q# e' H$ _
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); % n# Z5 p7 P5 }* c
}( ], ^# i& N! F) T6 r* k
if (ERROR_SUCCESS==nRel)$ c8 j0 Y' T" a/ y7 u
{
$ P$ D, N9 D" W# G8 G //输出网卡信息
" Y* z% u, Z: S& S output(pIpAdapterInfo);% S* S9 P8 k- N% |5 b. Z- M( I
}8 ]( _0 S1 z5 T5 O
//释放内存空间- e! a7 u9 Y. Q& |1 V: H$ T$ Y
if (pIpAdapterInfo)
9 O& A: j2 a( \8 p/ i2 s" p {
/ }$ B8 V- [0 Q. z% v8 p* d delete pIpAdapterInfo;
# E( c; |& _* f0 g$ P }5 b @, s: @2 w
getchar();
- @# p0 y/ S" u6 y$ x return 0;# O. ~9 r& n1 z! b$ M
}% p: ?' {! M0 g3 [* ?" f' k; \
///函数作用,输出网卡信息 i. Z. J& H% r. L4 k
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
% T- q: y& [, e9 B( T0 B5 F" x2 J{. F% r6 i. O8 I, o; d
//可能有多网卡,因此通过循环去判断
7 Q' M, Y0 [6 a9 `6 B while (pIpAdapterInfo)
* C+ n' g$ |6 c; W9 b4 O' n3 A {7 N$ y& }+ G F. m& c# Y
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
/ i+ ]4 S) i8 ?" N cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
- i5 q" v; p4 y+ a' l5 x cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;7 S' L* t. x+ ]- G) D7 G T4 W2 H
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)) y5 e: Q$ L+ [ p, D( Z
if (i==pIpAdapterInfo->AddressLength-1)
, Z- B. M" [1 q/ g( E, ^7 i( j; ~ {2 O* w; ^- D! }& O& R; Q
printf("%02x\n", pIpAdapterInfo->Address);
" Q! M/ L! H: o7 u ^! H& W: N }; D3 J$ L, Y* O- B- k
else& r0 F2 w8 e) E0 P
{
0 J; o! Z% u: N5 s printf("%02x-", pIpAdapterInfo->Address);1 U2 k1 l& R* P& {& o- [: \
}
3 L# h! P, ~" L7 }3 O cout<<"网卡IP地址如下:"<<endl;7 M a& R( ]5 L: a1 R P+ ]
//可能网卡有多IP,因此通过循环去判断/ c; x P1 ~* o( M2 x1 R( l
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 T( U2 N$ x- \. o) F do 0 r: N n: ~6 I% M ^* d @& T
{
9 K# U1 r' p+ ]" v cout<<pIpAddrString->IpAddress.String<<endl;
1 e7 \0 m1 ^4 H7 e! D# Y& Q# L0 k pIpAddrString=pIpAddrString->Next;. g* I8 T; g+ a3 C5 y, Z% k
} while (pIpAddrString);
/ }& r q/ y! f+ f' T( h. \ pIpAdapterInfo = pIpAdapterInfo->Next;3 f% L6 Q% E R( \$ E- y1 Z) t
cout<<"*****************************************************"<<endl;
- t" H5 y8 W \ }
4 O# Z" E: b7 h; ~$ j return;6 R: r( ~& e4 m6 ]- y/ X; w
}& |9 `$ Y5 m$ C9 N# \9 G
|
|