|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
4 y1 ~0 s& }# Y$ _% u
0 h* ~( K# y- ]9 j, ~! {
2 C$ e [: K# u// 头文件包含/ t; P# D' g; B D. j" b
#include "stdafx.h"
+ Z3 O9 m+ v) z2 r- C. T3 M( Q( S1 `#include <WinSock2.h>* [9 s* Z3 u1 c3 |+ q5 t
#include <Iphlpapi.h>& \4 Q3 E4 R: C
#include <iostream>) |% P5 B( A1 w$ P9 L* E) Y
using namespace std;" ]# c/ A# X7 m4 H& R
// 函数声明
) P5 {$ |# ]( l( B2 D8 P3 z& U Lvoid output(PIP_ADAPTER_INFO pIpAdapterInfo); C5 Z$ E7 K* ~/ m" G4 D
// 程序入口( n$ ^$ p, b D! D3 B5 r! E3 W0 u0 y# @
int _tmain(int argc, _TCHAR* argv[])( K) Q3 C& q0 x4 Z9 A
{5 r0 w# ~9 C \$ z! [- n( m* H6 ^
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
q2 B* M1 k' H- | PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
2 q- Z9 @; L9 k7 J //得到结构体大小,用于GetAdaptersInfo参数3 [; s' b+ U8 E7 K5 [+ X; E
unsigned long stSize = sizeof(IP_ADAPTER_INFO);" O3 r6 r* G( H( M9 \/ }
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
9 O% b+ c2 d0 q8 s int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 y7 `% i3 O. U ]7 k if (ERROR_BUFFER_OVERFLOW==nRel)8 K; I& ^" k) K( b6 `3 w3 m
{
* I5 P4 w5 D! O //如果函数返回的是ERROR_BUFFER_OVERFLOW
, o6 x U6 d, R' d' r+ w" A. { //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
7 x' K1 |4 S/ m" s: f9 R* P //这也是说明为什么stSize既是一个输入量也是一个输出量
9 E: q8 P; ]4 |% n. k //释放原来的内存空间, B- T M" h- H2 J
delete pIpAdapterInfo;
& r/ s4 @# `6 R) U8 b( W' F //重新申请内存空间用来存储所有网卡信息8 f% S2 O" P: D0 W
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
4 h3 Z; \7 O: d //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量( g; u/ h* _ j% K
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 8 t/ Q' B8 x& N2 r& G, A6 B
}! I4 ^5 x& c8 N+ D
if (ERROR_SUCCESS==nRel)
1 @) \$ b% T: }0 K' y {8 r1 m( w/ `( n% X! ^% B) s6 w
//输出网卡信息# A" C$ s- w) J- Q
output(pIpAdapterInfo);0 a% f. q- |; Y
}
; k- `0 W, G6 Z/ z7 F u/ {- ?9 O //释放内存空间4 ^; t% u$ h- ]8 |. L* m
if (pIpAdapterInfo)
, L; s) D6 \; L& y5 n7 C; J0 f: h {
: T5 t E. i( ^4 }, C" U delete pIpAdapterInfo;( r7 I; w) f2 l1 a, o! L" D; j
}( W/ a) ]" J0 q+ Y
getchar();$ J' R6 V( _ U& f' ]; v& {! U
return 0;/ q7 S& E* }0 N* i( L
}
; u. e" Y. B3 J" O1 l) E. | k///函数作用,输出网卡信息
J& s7 ?) V5 g6 c' ?' \0 k# Xvoid output(PIP_ADAPTER_INFO pIpAdapterInfo)4 b9 {; r2 s6 t
{; Z! v8 z4 h/ L* u3 W; V. r* d
//可能有多网卡,因此通过循环去判断
' a8 l( \) a, ^) g while (pIpAdapterInfo)8 b+ n/ T' Q& z
{
- g+ w6 C g7 _0 S% S( v/ R cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
I6 Y: s5 V# i( E5 W cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
2 F. `, o8 d K7 G2 T% g cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;5 K* v T! l- ?' L
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
- C% E D( Z& F- S _7 |! f& S! P* e if (i==pIpAdapterInfo->AddressLength-1)
% d% f: [+ Q* m {
% b& ]( x% f7 n; d3 i1 R printf("%02x\n", pIpAdapterInfo->Address);
+ T( s z* J' F/ Y$ T# c3 ? }
4 k2 I: d, c+ w0 T5 T6 s8 _ else
* ~/ D: y8 ~3 ]) `* R. p {
. v: B d* O4 o& m" U printf("%02x-", pIpAdapterInfo->Address);" @- D Q- K3 d: _7 x9 x
}
3 b: [+ g8 G% B( Y3 l+ A+ ? cout<<"网卡IP地址如下:"<<endl;
$ z0 a4 o, L! i% u //可能网卡有多IP,因此通过循环去判断; T- k1 K! A7 N8 w+ z2 a5 X5 j
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
; [% }" y- W& ]% [ do
6 v- {/ g& F+ w' R" O' H/ u0 w. F {
4 v1 q' [ W1 m1 ?& \3 }. G cout<<pIpAddrString->IpAddress.String<<endl;5 t5 _& ~% ]- e- ?* \
pIpAddrString=pIpAddrString->Next;
9 @+ [& X4 O" i, `; X } while (pIpAddrString);$ s! y: B: M7 M
pIpAdapterInfo = pIpAdapterInfo->Next;
7 \1 [) a: B2 l$ ~0 O. e8 ~/ p8 B cout<<"*****************************************************"<<endl;
( o$ H- Q' ]6 ?5 K* J/ D }
8 }- c9 T" O8 v# u0 O return;' K2 u, N* I) g; f: @
}
9 A5 Z+ p7 i/ _$ w% R v# Q |
|