|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
! @4 N8 F% t0 G2 h
. H5 N+ g3 J2 F9 g7 I% U b0 f/ a* r7 K3 c2 d
// 头文件包含
1 x5 z9 `* |- u#include "stdafx.h"
- @6 B2 g/ u, P9 c( N7 z) y#include <WinSock2.h>2 d: V: N2 s. W6 w5 L" o" N" k
#include <Iphlpapi.h>1 |' F; u: {$ u4 {4 ^- g
#include <iostream>
- n/ e7 \6 x9 F8 Eusing namespace std;
+ B3 U% W) E& `. P( y( [5 ?// 函数声明4 s% m5 L" x5 i0 P& Y
void output(PIP_ADAPTER_INFO pIpAdapterInfo);' @* J) E8 Q. _0 ]9 Z
// 程序入口% i6 e( @# I) w/ U9 ?
int _tmain(int argc, _TCHAR* argv[])+ ?! l" \' J2 _( h
{' C4 B0 v+ b* i5 h& K
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
" h* F, d; b- }1 `) B PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();0 L# n& [4 }0 v
//得到结构体大小,用于GetAdaptersInfo参数
3 ]6 A- {/ Z( r3 i0 k unsigned long stSize = sizeof(IP_ADAPTER_INFO);$ Z+ ]* ] N; d- Q: B
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
% N9 r4 \5 Z. U8 w$ ?: r int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
4 S, V2 S5 s" P9 e if (ERROR_BUFFER_OVERFLOW==nRel)2 {% R+ [9 H* v6 x6 `/ `; a+ ?. ]
{- M8 \# f- n3 F, p, }
//如果函数返回的是ERROR_BUFFER_OVERFLOW
( }! f( y; G1 d5 ]% E //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
# z" w* l' i3 ~ //这也是说明为什么stSize既是一个输入量也是一个输出量" s* p' f" F8 \
//释放原来的内存空间
( t) c; r0 {" N3 i; a3 I2 K3 N delete pIpAdapterInfo;, u/ c& Y# n; t% ]* |% W
//重新申请内存空间用来存储所有网卡信息
3 p5 ]3 r" A0 v9 O5 Y4 ~ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];) L& g3 k3 S8 e: F; Y
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量; ? i5 G0 I" f5 q& Z
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); ; l/ C5 @4 a3 R# t" F
}
$ h% }7 g' p3 @" ]# q4 J if (ERROR_SUCCESS==nRel). f/ x9 m, ~( W: m
{/ F. k! H+ j. D, H
//输出网卡信息
; h* b% n/ j1 d1 z, V0 R) s output(pIpAdapterInfo);
8 h1 A3 z; d3 k6 s* ] }7 Y7 O4 G& {5 Z% E7 I5 k
//释放内存空间0 w. e% ~. _: F N- ]1 ?* p+ J) A
if (pIpAdapterInfo)' p4 t% r2 w0 m
{4 G& J6 f7 ~2 I, Z* b; L
delete pIpAdapterInfo;
+ a8 ]& A/ m7 p2 q L }4 L$ H4 P: X- t; j _4 D. i- B
getchar();- Q8 o0 |0 z Y6 L9 K4 f3 [
return 0;3 k& p, G/ i9 B# b
}
' H* o8 N& F# t6 ], ]- e7 Q4 J///函数作用,输出网卡信息1 l- Y+ f6 A0 P3 ~1 V4 G
void output(PIP_ADAPTER_INFO pIpAdapterInfo)% {( ], {$ {2 O& P+ _9 W
{# P2 s" T( g6 m! I5 O
//可能有多网卡,因此通过循环去判断
3 W# Q3 w, A( `3 ~5 s4 d9 x while (pIpAdapterInfo)
+ L& C# K" @3 O* Y9 B {; {" |/ R! e8 V9 R
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;/ w, n2 E5 w5 P p$ H3 n5 O# j7 }9 ^+ N
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
3 J) e% r$ I9 b5 B+ x4 {4 u* f cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;" s" }; \/ L/ U
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
" H3 N. K) {- T c6 Z* } if (i==pIpAdapterInfo->AddressLength-1)
. F- i% R6 @9 x D {
. B: G) B1 u& w* P% [! d( |9 u printf("%02x\n", pIpAdapterInfo->Address);2 l! T7 v: f1 Z! `
}
9 Q( ^/ m& `/ _ B2 x( I else
/ Q( Q1 [6 L2 l; Q {3 j" T6 ?! U/ h7 @
printf("%02x-", pIpAdapterInfo->Address);
8 I4 e6 g" M/ @7 ` b }& C! M" Y0 I2 x) l+ Y8 E: A' w
cout<<"网卡IP地址如下:"<<endl;
- D6 E1 O- ]6 K0 B+ M //可能网卡有多IP,因此通过循环去判断
- m$ D1 G' }/ ` _, n3 W IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);2 W. x' D/ U- g6 U! Y8 l
do
7 v+ }$ c& i8 W3 \, c" l {) \: q# ^0 p' ^! j) H& }
cout<<pIpAddrString->IpAddress.String<<endl;
/ i! r6 {' ?2 l4 W pIpAddrString=pIpAddrString->Next;
7 k- V3 L+ j7 c/ X/ n* s } while (pIpAddrString);
D. i; Z! G: ^$ I+ e pIpAdapterInfo = pIpAdapterInfo->Next;
; e7 z" n3 d* ]0 b0 D* J+ e' x cout<<"*****************************************************"<<endl;8 ^# ]) w& P9 J+ I* b$ t
}
$ p5 c) c) J( _4 N) U8 T return;
7 l4 w# O0 t$ W+ m+ s2 n3 ]}
+ J$ |, B6 z; u9 Q' z |
|