|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
+ z- A$ ^* O, m
, l; v2 ~2 e" e
& @1 @4 d. m& k; u y// 头文件包含1 L8 K$ V! S4 q9 y& n* W
#include "stdafx.h"! y. O* U0 J* r! R2 C( `/ D
#include <WinSock2.h>
+ \6 ~" S* m( \- _3 ~& h3 E#include <Iphlpapi.h>
3 G) Q9 x; v2 l: _" D# C#include <iostream>! o+ `% ]+ l, \2 C$ H) o T! f) z
using namespace std;. o2 i4 m- l' W. ~
// 函数声明- v& Z" _" V+ ?: m
void output(PIP_ADAPTER_INFO pIpAdapterInfo);9 h" G7 ^$ o9 D( Y
// 程序入口& z" F; }; c- W5 K4 }
int _tmain(int argc, _TCHAR* argv[])/ P/ O0 O D4 u
{
$ c- W# A$ b( ~& z: X* f' I8 f //PIP_ADAPTER_INFO结构体指针存储本机网卡信息9 [3 d. J7 t; G9 ]- d% I% |
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();. I1 P9 d3 ~6 `
//得到结构体大小,用于GetAdaptersInfo参数
% M8 D- j/ D: M8 W4 _5 O5 `( h1 D unsigned long stSize = sizeof(IP_ADAPTER_INFO);
; z1 L3 \, P$ O //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
7 W; ]" B2 i g0 ~+ x, H, x int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
3 C9 v# a& U, {* Q5 P if (ERROR_BUFFER_OVERFLOW==nRel)) E0 ]8 h# a% ~' r* l X! {8 J
{
0 T1 i2 E! Z8 V6 u8 u //如果函数返回的是ERROR_BUFFER_OVERFLOW
! \ O7 y; D+ M# V9 m //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小5 e0 L, ]- _0 M# [
//这也是说明为什么stSize既是一个输入量也是一个输出量2 I* F0 X2 j% K+ Q
//释放原来的内存空间6 i# H8 B" o* M2 \
delete pIpAdapterInfo;& x) f6 M( L. s5 p3 V' H4 Q
//重新申请内存空间用来存储所有网卡信息
0 r: ~8 O. Z- N4 O pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];. k3 c3 P- m$ i
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 |7 U0 X I# k6 H
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
6 c4 M* U& A* X8 c }: v- ]' J5 i9 Y+ E* ~: Q
if (ERROR_SUCCESS==nRel)5 V" B6 Y' ~7 a/ e
{: E/ ^ g2 i2 n8 L' z' ?, R
//输出网卡信息
|8 D0 H$ F5 F. C5 \) W; l output(pIpAdapterInfo);$ D9 X3 t- r$ D3 L' Y j
}
' ^% s; m, L' ~& c" v; N) B. l$ s //释放内存空间3 p/ t; t2 L, T+ l$ ?( I9 G: p* n
if (pIpAdapterInfo)
& T! L# g4 m# Q6 }+ Z {6 S$ Z; O7 @$ i& G0 E, p
delete pIpAdapterInfo;" H# z* @) K7 `! ^/ B- g1 @* i: E
}& s5 }5 u O; s6 l |
getchar();
. X, w7 q: Z# Z return 0;6 o8 A A+ h1 m6 c& X, K
}
4 j; p) w. D, N* Z///函数作用,输出网卡信息
~' W+ P5 f! u4 H# _void output(PIP_ADAPTER_INFO pIpAdapterInfo)
, \. v$ d9 v2 T" [0 g{' d8 t* A+ X- N' g/ m3 ~! A' F
//可能有多网卡,因此通过循环去判断7 V" F' d' F# Q- t) O
while (pIpAdapterInfo)
, X% x) F) L0 f, }8 z3 E1 ]6 ~% m {
) v$ e# T8 o" j# h cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;6 D2 X9 s- [6 o* R$ o- m
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;' P0 s6 B+ f$ l9 `4 k7 o
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;' N" A# i5 K" a" D; u
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)7 i4 b- U0 V' G+ }. @- v1 w) \9 E
if (i==pIpAdapterInfo->AddressLength-1)+ u6 t) I# s0 l
{
0 D. u2 C& u( N- ?9 I% t printf("%02x\n", pIpAdapterInfo->Address);3 v9 |6 d3 V7 G* _4 o8 K. |
}+ }1 a# N. h2 o
else, J* W, E; {% `" D6 O1 }
{. o/ p8 D1 }; _* D4 v& l5 X
printf("%02x-", pIpAdapterInfo->Address);
( R, b# d6 d0 l7 Y# w; n0 d }
# I4 w7 ]8 A; G- c* b1 r0 A cout<<"网卡IP地址如下:"<<endl;
, _; y5 K" N' v; o& \* |" M, P //可能网卡有多IP,因此通过循环去判断 u4 q0 b6 m! O; S) R
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
m3 M5 ^& @9 ]3 d6 R+ ]6 @: N% D! p4 } do
* M. C6 A7 j) z, b {) N% ?4 U3 b; N6 ^8 G
cout<<pIpAddrString->IpAddress.String<<endl;7 I4 p% t( z' m+ ^" E
pIpAddrString=pIpAddrString->Next; z% I5 T; {) ^6 M$ z
} while (pIpAddrString);! k# H8 G! k s a' U; J
pIpAdapterInfo = pIpAdapterInfo->Next;- ] p7 ?9 U) H( f/ s/ X/ ^1 i* }
cout<<"*****************************************************"<<endl;
0 V1 g& Q" r# l1 y5 A+ o/ R5 b }
, p. e/ E1 `* M3 S4 D' @( L: I- n return;
/ ~+ t6 g) w" l2 f# l}' R, c6 S" R% s7 V, f4 G
|
|