|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
' A0 S1 Z# d, O: y% I2 j
6 }5 z7 N+ N+ N* V4 M
, H' B/ \: ^( D- |
// 头文件包含) N, j$ R/ j/ c6 C1 w, ?. \
#include "stdafx.h"5 r% b2 ^9 k. H6 l) f1 C( f; H5 h4 H
#include <WinSock2.h>( q9 z) E. x, P4 @
#include <Iphlpapi.h>
6 c9 H9 |0 Z- x! @#include <iostream>! q o9 M+ {2 h! j
using namespace std;
; e1 y" o+ Q' o// 函数声明
4 P# r2 {7 I; [# X' n) L# Jvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);
1 Q+ R% [; d2 ?- G+ A// 程序入口
* V9 M9 C; j9 sint _tmain(int argc, _TCHAR* argv[])* O1 `( m; s& x' C2 y' c2 F$ M7 z
{$ S4 n0 Z& ]6 q8 u1 O- o- [' ?' [
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
+ ~' z# j+ v; `5 P B/ y8 P( N PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 o$ w1 G6 Y0 A5 D7 F //得到结构体大小,用于GetAdaptersInfo参数# v! {# J8 c. w8 r
unsigned long stSize = sizeof(IP_ADAPTER_INFO);- @, R/ O1 q6 }) q9 w
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' |% q; N# a( I& y6 S$ p! N8 ?! P9 e
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);% h, B: M) g! {
if (ERROR_BUFFER_OVERFLOW==nRel)4 p' h; D- Z# x# [) {: o
{8 J. d% W/ S; D& p/ }8 r! `
//如果函数返回的是ERROR_BUFFER_OVERFLOW* f+ E! D6 ` N* b
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小% }, c m8 T9 n( L0 j; l$ [7 S
//这也是说明为什么stSize既是一个输入量也是一个输出量
! F* a: x4 ?9 U A5 s. c //释放原来的内存空间- T* N V0 e9 C7 b' L- L
delete pIpAdapterInfo;
6 M W8 K* p& l P1 v: d6 R //重新申请内存空间用来存储所有网卡信息3 G8 g/ C* t1 |2 M" _
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
$ s- D- s' O7 V5 \ //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量# \" R8 D$ ~3 x
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); , _( Y7 l6 y& z2 A$ r1 j
}, }" d8 E) m0 M
if (ERROR_SUCCESS==nRel)
; ?: P" }. d3 _/ B {
2 d5 a' x2 q) i* h3 m, A1 t) h //输出网卡信息
4 B3 E3 B( @* J+ H: Z output(pIpAdapterInfo);
! I% D# s( _4 h0 e0 o }
7 C1 ]# D% ` Q6 p. {2 r //释放内存空间. X8 q7 e' i" K v- K% z T1 Q, |
if (pIpAdapterInfo)
. v. ~" j/ J4 |# \. I* A) A {. \; c; K4 R+ t( s
delete pIpAdapterInfo;4 D& e/ B* ]: }
}
. F; o6 m' x/ ?: r+ W$ } getchar();3 C# `6 k0 p) t0 b
return 0;# S) A6 `! F$ M; c Y
}
- k1 |2 f* h# }* i+ \ q) i///函数作用,输出网卡信息
+ r* Y' n3 P1 b! L3 }- Bvoid output(PIP_ADAPTER_INFO pIpAdapterInfo)
% c7 ?" N7 [* x0 @{% F$ a5 q+ B& j5 W1 S; c k
//可能有多网卡,因此通过循环去判断8 Z) K7 t- e. Y% Q' b
while (pIpAdapterInfo): C0 n8 s# |2 u
{5 z u& H, j+ M
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;+ M' y+ U2 q: g8 ^( E
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
1 ]; Z" Q) H; l- Y4 P3 u, o! t cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
* g& t2 Y+ V7 g" l- |& R for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)& @4 [7 w; h2 q3 L% K) T, }
if (i==pIpAdapterInfo->AddressLength-1)
! o" M: B8 ^- d/ E {" w3 n+ R; q" w" T
printf("%02x\n", pIpAdapterInfo->Address);
k* U4 v- u9 C1 | }) C; L) l0 d# ^( K, O
else
2 F( Z8 Z( L, w {- ]5 H, f: B6 J, P* ]
printf("%02x-", pIpAdapterInfo->Address);
) f" D X; l3 `% L4 w" a }4 M# J' W6 V' D$ s$ a
cout<<"网卡IP地址如下:"<<endl;( E/ R1 N( P. I/ ?0 E
//可能网卡有多IP,因此通过循环去判断
7 t' \( t1 K8 ?3 J9 _ IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
: S, K0 ^" z9 }9 X! u4 o do ! C) g; i6 y5 ~! `
{
: H; [! L" i; {5 v8 F; o5 `+ k cout<<pIpAddrString->IpAddress.String<<endl;' |; M( J6 J* S, `8 Q a
pIpAddrString=pIpAddrString->Next;1 i+ I8 O+ Y4 Q& ?/ d7 @8 h; \
} while (pIpAddrString);2 T/ Y; q; L( T$ N. l: B" S
pIpAdapterInfo = pIpAdapterInfo->Next;
! R0 ]6 {( R6 B' t8 m9 I1 s cout<<"*****************************************************"<<endl;
2 W% Q" W, }2 V }8 B W, E& }! g
return;
0 u o0 d) J$ [2 g3 l* r}3 {2 B6 m: g* q% C- g( T
|
|