|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
$ I" r# g, s7 l9 J6 t: B
" W$ Y; m2 s* O6 J
1 @8 x1 a7 |! S/ Z// 头文件包含: i* G/ M9 `' g6 _
#include "stdafx.h"
( @3 ~& O n+ V. {- j. M! Y#include <WinSock2.h>
/ \% D2 }% S: T" N+ d4 q#include <Iphlpapi.h>
4 J' i4 V) ~4 A8 A+ {0 p& ~#include <iostream>
& v, v- \' X) |using namespace std;
7 ]* W1 m p& E1 V, z// 函数声明
v, w5 x9 h: G4 d+ w: l. R7 hvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);
, F7 L; v2 E' i- a// 程序入口 ?( k0 O0 E) }
int _tmain(int argc, _TCHAR* argv[])5 m+ C% k5 W0 c. E+ q
{
& K/ S; G6 s5 E9 g //PIP_ADAPTER_INFO结构体指针存储本机网卡信息/ S) G) U7 @( f" g6 _( y/ y
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
% f& h) a8 v, Y0 ~ e- u //得到结构体大小,用于GetAdaptersInfo参数4 X2 l4 x/ ]* K3 s \& F% h# g! P
unsigned long stSize = sizeof(IP_ADAPTER_INFO);, @7 E2 N7 N' G1 Y0 ^
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
1 U% P' J. G* \0 C% d int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
/ A# Q- n1 |( X8 X if (ERROR_BUFFER_OVERFLOW==nRel)& `0 i0 }$ c' g6 z1 n
{; m5 j! J3 a( Z
//如果函数返回的是ERROR_BUFFER_OVERFLOW0 N) I7 D1 U: l- s( t5 O! w" l$ G
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
7 }% H* D v6 Y, F3 ?& t //这也是说明为什么stSize既是一个输入量也是一个输出量0 }1 w, n* Y [* X
//释放原来的内存空间
e4 y6 I; Q) W U: { T9 y delete pIpAdapterInfo;
' u! O1 w! G* r //重新申请内存空间用来存储所有网卡信息( s( L8 K$ t5 G7 T; Y
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
% Z% L5 x" S" f) ^, D5 l! a //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量, L: l; J$ b! y( Z' ?3 V/ k
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
' m2 B3 ^& f. ? }
+ c0 e" o" N( v4 |2 o if (ERROR_SUCCESS==nRel)
3 T( T& e; B: \1 o5 A9 ?# v: @ {/ `# e+ w& {- R4 y
//输出网卡信息
7 J! s: y* q7 J2 F& k output(pIpAdapterInfo);" c' F' F% u/ q5 h5 @
}
1 f9 q/ B5 v+ \. A: L1 w \ { //释放内存空间
, D6 V% R0 d( I7 R* N k O if (pIpAdapterInfo)
+ x5 k0 B: v ]1 e {
% ]0 [! J/ g# u delete pIpAdapterInfo;. t# x1 q6 R6 p s1 F4 F7 O3 V
}7 N) s$ i9 B) Y) {. f' D" D. o, E
getchar();3 V+ f& N8 R2 c7 r' X+ K
return 0;
, D/ o, {. b u+ n; s}
# C3 s& i: M, L) f///函数作用,输出网卡信息
9 `) u0 e5 V( D& C4 n! Z, Q% Evoid output(PIP_ADAPTER_INFO pIpAdapterInfo)
) S2 C9 D$ f2 s6 u7 q, a/ t{) \' p1 C: p4 ~' S2 d0 G
//可能有多网卡,因此通过循环去判断
7 W3 N8 Y5 [' }1 t2 i. S9 N while (pIpAdapterInfo)
7 B0 R% f. `' s0 o4 I7 ~ {
4 p2 g- Y2 n8 @ cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
7 C; J w7 I9 n- d( ?/ R cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;. V- l9 `: ^0 ]/ O0 K4 v8 K# N
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
^; S: X8 O4 \+ a" W3 y for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)6 d2 \5 S5 Q; E$ | X
if (i==pIpAdapterInfo->AddressLength-1)- |! ?, f1 t3 y
{' e. r D0 G, p: U4 N+ y* L3 H6 c
printf("%02x\n", pIpAdapterInfo->Address);
/ N9 r5 c: Z4 J' ]$ }: `; |! N }
+ K) m V4 m8 W: A2 B& z' ]8 Y7 D* G+ L else
. z; f. M) s8 _1 |. t, E# { {
1 W$ n8 K9 `2 r1 c2 v# J8 l printf("%02x-", pIpAdapterInfo->Address);
! t: \, M; ?1 \0 v" ~* i }
' u& l3 I; B6 {1 p6 T; [ cout<<"网卡IP地址如下:"<<endl;! D' {9 X6 W% s7 k4 K- _" B
//可能网卡有多IP,因此通过循环去判断6 }2 V% f/ ?8 d; h
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
6 P& \, i x1 C4 p6 D- q( P do
, T. j2 o6 o F& q {
/ F' f& N" h( S9 ] M D cout<<pIpAddrString->IpAddress.String<<endl;' U5 U* o v: g
pIpAddrString=pIpAddrString->Next;7 T; B( t- q9 \6 T- J
} while (pIpAddrString);
* d) \% y; m/ _* l3 R% v% x pIpAdapterInfo = pIpAdapterInfo->Next;
6 y" {& Y! p. {6 h cout<<"*****************************************************"<<endl;
0 f% y0 ^+ z; M- m+ h1 C7 b) q; q }
. p4 Z, ?$ v' i* r1 M return;
& [% K% P( Q/ o1 H' w}
2 E, z# g5 T: K s5 F0 S$ p# V# _- K |
|