|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
; m& H R. {7 m5 w, p% S( e! _: Y, r' S; X8 s
: K1 _4 F9 [3 \4 c( v% I// 头文件包含& H$ Q" [, K w+ e1 |5 J& r, C
#include "stdafx.h"
; Y( F: x3 P/ ]+ h#include <WinSock2.h>1 p* A/ @0 L- [4 f9 N: L% ]
#include <Iphlpapi.h>
9 o( j. h- A. X9 f#include <iostream>
, c9 {4 B3 j5 r R# vusing namespace std;
" ~4 B$ c1 }9 j% E7 b// 函数声明. ^# K- J+ _* Y1 r& [* t( Q9 d
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
; n' `' k8 p( j// 程序入口
* j V! m1 ]$ [1 J% kint _tmain(int argc, _TCHAR* argv[])
9 T+ q+ P, k' m' T3 h; c( l) R$ J8 B+ s{
4 B, d! |4 I2 i' a4 [ //PIP_ADAPTER_INFO结构体指针存储本机网卡信息, S9 L& g7 I7 ~$ Q0 U V
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();) q/ C) x4 D' n8 I6 D
//得到结构体大小,用于GetAdaptersInfo参数
1 m- [5 f- E1 E( o7 U# ?' l unsigned long stSize = sizeof(IP_ADAPTER_INFO);' G) |$ n+ O. i" O. A7 Z5 ^
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量$ d: H# e7 f' u0 G
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
! Q$ w$ ~& j5 o! [1 b6 g if (ERROR_BUFFER_OVERFLOW==nRel)
' Y: _3 n1 W% C: u; E& b {& G! v0 {9 o e7 v3 A$ L F, V& V
//如果函数返回的是ERROR_BUFFER_OVERFLOW
+ n1 I7 L4 q: w( Z //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
o( `) Y5 C) i7 L Y& ^& N //这也是说明为什么stSize既是一个输入量也是一个输出量& ^$ V4 i1 b% A1 R# a# ]' ]
//释放原来的内存空间8 f6 t( R% D. y$ M, k# j7 J
delete pIpAdapterInfo;
9 @& v" {$ d9 T# E$ l //重新申请内存空间用来存储所有网卡信息
" L( W: o7 p5 B6 ~ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
: l+ l7 H) X# {8 O //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
+ K U7 d. ]% a2 f9 b3 s nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); $ L1 D h- r5 Y8 [) u4 M) K8 G
}
3 X$ R' x: v" [/ z5 c/ s% M2 | if (ERROR_SUCCESS==nRel)
# ?: @- x" ~ A7 G- W1 `2 b {8 L1 R2 `; ^% l
//输出网卡信息7 \' ?3 y" K6 L: e
output(pIpAdapterInfo);; d4 @5 m# s0 ~5 l6 X% a1 F
}
- {+ u0 @# ` _ //释放内存空间* I6 o6 i4 m! Z: ~# \" k% e
if (pIpAdapterInfo)/ b* K/ v0 F0 Y: A
{5 D5 d% _0 N1 z H1 X4 n# _
delete pIpAdapterInfo;7 ?7 F: Z- }9 F5 p( g/ U4 m4 ~/ d
}; J+ X/ w% I, W' V
getchar();) T( J5 A) I. ~( M: }
return 0;! O$ H& I c% V5 U& \% |
}, W! M2 i/ a2 u# m) |) k- ~* T
///函数作用,输出网卡信息% b' i! b9 |! a% K/ p1 y
void output(PIP_ADAPTER_INFO pIpAdapterInfo)1 f6 r7 w* @+ A: L# }8 s: v
{
: D5 w- _ Z" x4 M% r( [* q/ F //可能有多网卡,因此通过循环去判断' V9 k* j$ v$ | B) {
while (pIpAdapterInfo)$ `# D4 D1 s; ]# H F2 m
{6 n5 d, L; W$ q- t
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
0 E) A/ s1 z6 W; y! Q. w3 L2 q! t cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;/ ^, t; U! D3 r
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;; y# v& a: a8 W9 ]7 z
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)( {% _) ~! C( h; e/ L8 _
if (i==pIpAdapterInfo->AddressLength-1)
# v4 y/ w1 w9 p {
: k/ L. i$ L! H( y printf("%02x\n", pIpAdapterInfo->Address);+ \8 ]0 T/ U1 a4 ?
}
2 j9 G8 x; f! Z: T' f else1 B8 e" e9 ^: R: w* K; z2 D. `4 V
{+ |. X0 g# b% a0 v( p
printf("%02x-", pIpAdapterInfo->Address);/ ~0 t. K( P" c
}
( s# m E' I2 y! p3 W cout<<"网卡IP地址如下:"<<endl;9 @- _) K i0 p3 l6 @" n2 V8 h
//可能网卡有多IP,因此通过循环去判断
c) t- I9 @; M. y5 O IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);( a" r" {& c1 h8 G0 h
do 3 U' F6 c) Y$ f
{! G' U- P& N5 _ s
cout<<pIpAddrString->IpAddress.String<<endl;
$ E4 c- b; X& |! u* A. a! R3 j pIpAddrString=pIpAddrString->Next;6 S0 S- {/ @0 Q* M9 z! N0 x* k
} while (pIpAddrString);3 \& l/ C$ m/ N2 K* q
pIpAdapterInfo = pIpAdapterInfo->Next;
/ Q+ ~& P$ f E& i) ]5 A cout<<"*****************************************************"<<endl;
" A! }1 P" f; d! G4 \2 g+ w+ y }
! m$ D4 T m" n! a return;# X6 \* j: j0 D' s% T. Y
}
; f7 p+ x9 w e |
|