|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
4 p+ n0 {6 a, f) Q) G* z- s, {
! Y7 c& E B: K8 E$ D7 g# t. A
- W. O) Y8 x3 X, }2 e- M! T( a
// 头文件包含
$ @. ^& u. r9 f7 P. n#include "stdafx.h"
+ S2 b) Y( J: \" M#include <WinSock2.h>) y& `! D/ @5 G9 q
#include <Iphlpapi.h>3 l, h5 J& k" M" {, b7 h3 j
#include <iostream>1 I8 j+ X. `. W! J" R* X: n/ S
using namespace std;* b8 Z& E/ C) P9 t% G
// 函数声明
5 A& v0 d% `5 d; @4 F. ]void output(PIP_ADAPTER_INFO pIpAdapterInfo);
* Q% E2 D# C) y' D- t2 p// 程序入口6 P, t0 K, M! o. @" P1 s H
int _tmain(int argc, _TCHAR* argv[])
$ [) Y/ _" O! {* r. ~. W{& W' ^" b( `" w% D7 f* G$ g" c/ S& f4 z
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
6 a- I& S* o' J% W6 \ PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();. A( P- t7 Z, _; ?; H
//得到结构体大小,用于GetAdaptersInfo参数$ w% {0 z6 o" u0 j# t
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
- i1 h# m! p8 }9 p, r; `1 d# E4 ~& ` //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量5 j/ b% r: m2 P' A4 `& D- O9 O! Q
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);: o% y( w/ |+ J3 i* y
if (ERROR_BUFFER_OVERFLOW==nRel)
0 }" r) f7 y2 R) f: d {9 ]+ K1 |8 \8 a$ y7 f
//如果函数返回的是ERROR_BUFFER_OVERFLOW
1 \% _! E& H% C, u //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小0 z' Q8 d3 ^6 m6 d& o4 l7 _6 t. N C! H
//这也是说明为什么stSize既是一个输入量也是一个输出量* A: {5 G. j7 c+ c+ _
//释放原来的内存空间
2 O3 H) N7 a- e9 j$ w, D( j$ G# d3 h delete pIpAdapterInfo;
# m% \% M% _( r7 d# C5 I/ S4 q/ [) x //重新申请内存空间用来存储所有网卡信息; K5 e5 z" L" e+ ~( r7 [% N
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];5 o1 D6 J( K R% V
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量' c9 j A3 C# ^1 R0 B* f E; M! t
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
9 {) X, W. n U% c9 I) i Y }
7 \& g# I. `0 D, V0 g% W; q if (ERROR_SUCCESS==nRel)5 G! J# D# G6 q1 o9 d. k; d3 L
{0 S" `7 J$ t8 `8 F
//输出网卡信息3 d8 H( t1 P0 |2 Q( X0 t$ H
output(pIpAdapterInfo);
7 z4 X8 R6 W5 E: a1 Z1 B- i- u }/ U% o2 V8 V3 O
//释放内存空间6 t: m9 Z; b- T" O- R
if (pIpAdapterInfo)0 C6 L2 T1 F$ A% B. X- h3 e8 P
{
# l% D# ^ f( {( Y6 R. | delete pIpAdapterInfo;/ u5 C5 K& K9 E9 |+ W$ u, }
}1 R7 L5 R a. P+ U
getchar(); B; M" M$ ?8 v* x% h, U
return 0;
8 Z2 _- a% z8 `}
* j1 { W/ C* _6 }# R+ V: O, m///函数作用,输出网卡信息& O# q5 w, T# N: \
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
( ]6 q( \) ]& n1 b2 F{
K5 w- M4 ~- d //可能有多网卡,因此通过循环去判断
7 U* h# T6 i6 q. Y G5 } while (pIpAdapterInfo)
' P% n* v" G3 i1 e( ]; y {
: _/ v9 l/ L4 J# {5 m" j8 B. t9 i5 U cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;# P2 u2 S: J& s/ N9 {
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;2 f) ~8 E; E8 r0 X
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
! k. ^" g5 V* @3 f5 |# C for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)9 ]' ]/ k3 x+ n
if (i==pIpAdapterInfo->AddressLength-1)
, T/ J5 k% a" \+ C {
6 z8 C' R7 g8 K( _% V: r printf("%02x\n", pIpAdapterInfo->Address);( H5 T: g* I( v( g/ n' k
}
) Y- c6 M+ ^2 p. G8 j& G else) m4 d s1 f5 I# Y& M1 K+ p
{# o! s1 A$ h1 m) {' k/ M+ q
printf("%02x-", pIpAdapterInfo->Address);5 N" p& h+ o. t: d5 @- O% p
}
J! e! e6 N1 v, `9 [) T% ]. c cout<<"网卡IP地址如下:"<<endl;
A; S4 D9 R ^- e% i3 L //可能网卡有多IP,因此通过循环去判断2 C, j7 j0 ?% c7 Y4 S
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
4 o7 u @& i3 Q; e! c$ x0 M do
8 _8 Y7 L0 r7 E) d8 @ {" z6 d+ ]1 I; T: @3 v- ]& `
cout<<pIpAddrString->IpAddress.String<<endl;, \- w( v$ @+ Z
pIpAddrString=pIpAddrString->Next;
+ i' K0 o2 |) n9 f0 u: j1 ] } while (pIpAddrString);
% i" A3 W x, s' h3 ^ l3 K: ^+ w pIpAdapterInfo = pIpAdapterInfo->Next;
$ N+ u/ X- T+ J2 r$ k/ \9 k cout<<"*****************************************************"<<endl;/ r# C3 u' _9 P4 S
}
7 b- F7 `# l: `7 E, w return;( T9 z& N( j& `4 V7 N; d
}2 x0 A/ e) |8 B r% r. r4 ~
|
|