|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 X* a* a" T* U0 x8 O9 ]/ V2 @7 B" T
* q# {2 i/ o. ?1 e+ _
! M' S' M2 x& |6 b9 l// 头文件包含3 ^6 J# z0 w" Y) j8 ^
#include "stdafx.h"
9 A! `% }' e: Y; `/ g( [) o. b# O#include <WinSock2.h>
' \% O& P3 z1 y% o0 x) x#include <Iphlpapi.h>
3 `- g' P" `/ s. z#include <iostream>
$ E; W" Y' p8 v( [/ h; Rusing namespace std;
, x+ J! ]4 ~5 |/ R// 函数声明; {9 ?3 e) F# A7 X F
void output(PIP_ADAPTER_INFO pIpAdapterInfo);# J" Q0 `* T! ]$ K& [* H
// 程序入口
4 P% _1 |1 d" G4 Yint _tmain(int argc, _TCHAR* argv[])
' y5 s( O8 z# K& C; v3 J& A{ P/ ?3 D3 P4 k: V6 t- f
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
. x; k4 y6 E* y2 M7 Z/ W# b PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();' V4 _+ e! A) y& H- q# F
//得到结构体大小,用于GetAdaptersInfo参数
/ s" L' b2 p8 k; F+ b unsigned long stSize = sizeof(IP_ADAPTER_INFO);
1 z& t( f2 ^% b& I$ }4 C. N //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 T; L0 @! Y% ]0 f: ?
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);, B- n7 e- {5 N6 a8 N; _
if (ERROR_BUFFER_OVERFLOW==nRel)
9 B# v* u; x8 \4 g8 P0 `+ | {
1 \$ E( {% k/ \* e3 m; E, r //如果函数返回的是ERROR_BUFFER_OVERFLOW
! t- }! f5 o0 C1 a5 `" O7 K) x //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
9 N* @- j4 r* `3 G) ` //这也是说明为什么stSize既是一个输入量也是一个输出量
0 P, V9 K2 u" |# P& h //释放原来的内存空间9 s2 R- x$ @. C; z$ [
delete pIpAdapterInfo;8 U' b. S, D5 J: f8 m: ?; ~. x
//重新申请内存空间用来存储所有网卡信息
3 `+ ?% k% e! i5 o; F: Q* @ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
! j" u: V" R O' s //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
' }9 P4 i( y7 R nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
2 y3 |- Q, I6 j7 o1 L: k3 V7 E }
: t& T6 h: L# j" m9 b if (ERROR_SUCCESS==nRel)
% J+ b2 g* w( @ `: M {5 _+ l2 }' P# [) y3 z i
//输出网卡信息
* j. K# Z' w0 V' ], V, h! y4 h output(pIpAdapterInfo);/ \8 D6 w6 s8 S; r* R1 w4 E
}9 W& ]: P5 p, l: k! f
//释放内存空间
/ \# b( t: W% |0 d! _# N# |, V if (pIpAdapterInfo)
$ K7 Q2 X1 H0 ]# @ {" ~: S( ~3 [' ], x* m) i9 t
delete pIpAdapterInfo;) ]( Z, i3 o, u2 T% i6 h/ j
}( ?( n) l6 W6 v: c$ j' |4 }
getchar();
2 ]4 Q6 c) [0 K5 q) _# ^1 d return 0;
& K2 e, z$ i! O2 ^ J, U1 K& P# F}) o( V# G; @8 Q
///函数作用,输出网卡信息
# R. E' D. f- zvoid output(PIP_ADAPTER_INFO pIpAdapterInfo)
5 T1 S5 I* k- x( ]4 |: G" _6 A7 {{
- M& X3 [& H8 n" {/ o% W8 g //可能有多网卡,因此通过循环去判断
3 c8 k) O& P7 t& \8 \8 I9 U9 J while (pIpAdapterInfo)! l. r" O9 s- Y1 X; P, u0 Y) r
{7 H+ S p4 |' C! D! o
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
0 S# X% F7 \; r( \# ~ cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
7 X& v- V* m; s cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;8 }" A7 O4 O0 t5 R- h
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)* K! V/ B+ i% R$ t) a$ G" R
if (i==pIpAdapterInfo->AddressLength-1)7 k6 \* Y6 W; ` D
{$ g7 J* ^& j$ I, p: ]1 @
printf("%02x\n", pIpAdapterInfo->Address);
4 L' v! ~. W5 @$ c7 }4 i+ @ }, c7 B0 p- P) _
else
7 D: o0 k) w) O% e2 z {; } p: z/ Z2 j3 M) R `& ^
printf("%02x-", pIpAdapterInfo->Address);' `& I- O; P$ {0 V6 Y6 S
}
5 Q0 L7 j; C$ n" ?; f5 P cout<<"网卡IP地址如下:"<<endl;
, k V, ~8 |6 T# r5 u2 j+ {8 S //可能网卡有多IP,因此通过循环去判断 k) ^. S1 A* f8 [; S
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 E, \' i$ m/ ^* r do
9 ~& Q G5 ]0 T# B" ?4 g {# b( l$ U2 f8 X; `/ W
cout<<pIpAddrString->IpAddress.String<<endl;
' N6 W2 v" I, z+ U pIpAddrString=pIpAddrString->Next;
7 K/ p1 N5 M3 R } while (pIpAddrString);
6 p% l$ J2 f- X- X2 a7 ^* e pIpAdapterInfo = pIpAdapterInfo->Next; q% T7 g+ o$ X" v+ u! E
cout<<"*****************************************************"<<endl;
1 U+ @" F9 P5 r0 i# M }
$ O$ j" g3 H. q3 M return;
4 B8 l: ?5 ]: A3 v0 R- ~}
# w' h1 n) D* v) ]9 d: d |
|