|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
P5 V/ q6 j: k' V f
/ Y3 D4 ?. v8 ?1 z6 f$ R B
4 Z5 ]7 E% J; B5 D! k
// 头文件包含
5 l! a. ]" i" w4 H#include "stdafx.h"! }1 s% \$ ]2 L1 d* t' O: M' N
#include <WinSock2.h>
- S8 X. Z& g+ c: N+ C7 H% w#include <Iphlpapi.h>
6 N- c) q/ h0 `4 s% w#include <iostream> r6 [; ?' `- T1 h. N* T2 N, n
using namespace std;
- ?: l/ Z8 R: T7 _// 函数声明8 Y8 w" T% z0 l' n% |
void output(PIP_ADAPTER_INFO pIpAdapterInfo);- M# e/ j, f! U
// 程序入口
& `2 d- W# D5 O% S1 I: G. `int _tmain(int argc, _TCHAR* argv[])
2 l$ n5 d: Y1 b0 `{% o& ?- U+ ?8 J k5 h% r8 w
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
, U4 `# q* p% o' X PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
2 [& M+ Y! Q( X //得到结构体大小,用于GetAdaptersInfo参数
" e1 ]0 H, J1 q0 t unsigned long stSize = sizeof(IP_ADAPTER_INFO);8 W8 F3 ^' D7 o- S. b; Y( a
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量( ` b5 z/ _2 ~3 J5 s0 A
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
$ b. F9 O9 C2 u, T6 g% f1 G- { if (ERROR_BUFFER_OVERFLOW==nRel)$ m1 _9 B; z7 q3 a
{
) ]: G5 ^! K# t' C/ v2 } //如果函数返回的是ERROR_BUFFER_OVERFLOW' ]9 }* F+ f0 J
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
3 j* |# o3 k# K- Q$ N //这也是说明为什么stSize既是一个输入量也是一个输出量
- o4 m4 Y) F# B0 V //释放原来的内存空间
1 h2 W% |4 h$ j- Z s' f" y delete pIpAdapterInfo;
: |" [! {7 |2 F( t+ n3 _/ b; o- b6 R //重新申请内存空间用来存储所有网卡信息
7 ]9 [9 C, S) J; F! P pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];* H+ _; s+ k$ q* J
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
8 e7 D- U- z( x6 T* o nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
/ j# }0 b( |$ ]+ y' j } }# N, C0 W, P5 F
if (ERROR_SUCCESS==nRel)
/ O6 g7 b6 i6 i+ p {
; Z8 }+ h* M8 N //输出网卡信息# E5 g- l( n! I, R) g; R2 \
output(pIpAdapterInfo);
: A; F. o' ^, A) c8 [/ O+ I1 {. Z }
8 ^' [- r/ w0 V //释放内存空间
2 l8 P# a' k+ E! d$ _1 k if (pIpAdapterInfo)- j$ Y8 M+ Z d
{" r% X6 Y7 ]% y" f1 a, ?% j/ H
delete pIpAdapterInfo;# d" m% Z/ t# w/ ]) R% u+ h, }- O5 x
}% l8 D" N4 l8 s+ J/ ?0 J3 p y
getchar();1 m6 o8 S. q; `/ v/ p& x- g4 J
return 0;
. [# h, x+ e+ z; t9 l}* \7 V/ ?1 {1 c2 X$ `) Z
///函数作用,输出网卡信息. k. I, `. o! e Z8 M" Z9 _" n1 \
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
% O6 X9 f0 Q* f* |1 r* ^$ n{
# _+ F+ K g- x8 f+ r5 O+ y //可能有多网卡,因此通过循环去判断
3 C/ d% C% D* e% H# e while (pIpAdapterInfo)
7 a5 G+ t/ j2 d( \. N {
& H* ^3 ~: O7 \, x' n cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;$ |, V f& D( Y/ Z0 N
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
% T; s2 w8 H! a& D. o9 N cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
6 F9 T" i+ U/ T2 i7 m/ B& S; x for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++), A" D6 T6 J5 M1 _# w1 Z
if (i==pIpAdapterInfo->AddressLength-1)$ `! Y5 F, n+ i
{- L" r' o) d4 y9 A
printf("%02x\n", pIpAdapterInfo->Address);+ s9 V1 O( ~ Q; S/ z
}9 E% F8 q' s/ \7 L5 o
else
# a. R6 R# f9 \& i/ _# f {1 I7 D+ `/ g- V/ t/ M
printf("%02x-", pIpAdapterInfo->Address);7 g3 Z) @6 [" Z/ p, V$ h# Y: O
}" \' a; S- ]9 j0 [/ ^5 H
cout<<"网卡IP地址如下:"<<endl;
$ \' v) F/ ?' K7 A //可能网卡有多IP,因此通过循环去判断) J0 P, T2 v% @! a; c
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
& R" O! p/ Q. k3 P: e) }" y do - b& ~3 Y6 w G( \) C
{4 g/ M9 O9 C) |6 E: ^3 O* @6 V) c2 T
cout<<pIpAddrString->IpAddress.String<<endl;
! V J+ o9 w1 _ pIpAddrString=pIpAddrString->Next;
{% f* y# n/ d/ @ } while (pIpAddrString);* C+ j3 v; s/ y5 L$ P6 |9 w
pIpAdapterInfo = pIpAdapterInfo->Next;) [4 \$ o8 m/ ]8 m# I
cout<<"*****************************************************"<<endl;) c. n5 I$ d0 L/ b [5 ?
}
: N: E# |; w4 L; T0 y% z% F7 [( ]/ ~ return;
) u% o; O9 N3 i, C+ r) @4 Y/ i}' u& B' Y1 E) O. ]
|
|