|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. X! H" K3 `* {
2 p: o1 `* q) e* L7 l5 }; U4 s2 C# m1 O& k: D0 M0 V
// 头文件包含
2 L1 ?8 v1 m; g#include "stdafx.h"( e. o" T) Y6 W8 S) \1 B7 L9 |3 p( E
#include <WinSock2.h>
/ W2 m( L1 q' n! E& K#include <Iphlpapi.h>
3 g! H8 ^" P+ j" C/ w9 F#include <iostream>
* U# j% F6 ?* g2 Fusing namespace std;
& Q9 |6 ^. L1 C2 L4 _# e* P `// 函数声明: G! T' c2 i# K0 ?4 K
void output(PIP_ADAPTER_INFO pIpAdapterInfo);2 [, X! A- _% \9 S
// 程序入口
0 _- J+ G4 E1 l9 m3 [; _int _tmain(int argc, _TCHAR* argv[])
' P, ~* d8 \/ [. }8 a{
7 R! N: F+ ]( s& E) P% n, i! i+ C //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
- z+ \) g4 Q, M( L4 O4 T PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 `6 A0 E; k% j //得到结构体大小,用于GetAdaptersInfo参数6 O( }+ W4 {0 |& ?0 x/ t
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
) a* y, W& a' Z$ T //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
1 O0 N. B9 J! j2 q5 { int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 H9 e$ a) Q' d0 ?4 q+ Q if (ERROR_BUFFER_OVERFLOW==nRel)- y3 q4 q' x4 t5 X" F2 y
{
& C1 F" |6 u( D$ b9 N3 D, V //如果函数返回的是ERROR_BUFFER_OVERFLOW# Z+ e6 T/ s, d& a" T
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
L2 D: \( d; C" l# W //这也是说明为什么stSize既是一个输入量也是一个输出量* S8 Y8 M% `" T
//释放原来的内存空间
- `, m; n' j. a4 z% P/ u delete pIpAdapterInfo;
% n) v5 ?0 u9 O4 d/ q$ L8 J //重新申请内存空间用来存储所有网卡信息% v8 @6 h( N6 V% Y, p2 X. W
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
2 _- A" s9 {2 U5 r //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
6 ?1 t( _ o% i; |: [5 U, `: c nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); ( g P, |3 z1 O% V
}* Q0 Y7 C: n6 K9 X/ K
if (ERROR_SUCCESS==nRel)
9 R# I& w0 q2 a! L: W {
" {" e# o. B9 a! P& t( l: g //输出网卡信息8 t9 o# V4 U/ r6 w4 s( \; U
output(pIpAdapterInfo);
* `4 K. N9 B0 c* y }: i6 Z9 Q6 ~3 i& V
//释放内存空间
* h# t; B8 q" x: Y! F if (pIpAdapterInfo)
$ F. m" u2 R, w1 a" i/ C2 k& s {
: M e' b8 [* V8 e/ V delete pIpAdapterInfo;* g# Z0 b7 Q; m. ?* G- H
} l! ]7 b4 z6 Q% y, e
getchar();* ~3 ~0 p+ _% i8 Y
return 0;* J9 _7 \3 x5 s
}4 y* P$ ?7 e3 x! E' E2 r4 A+ `, B/ E
///函数作用,输出网卡信息8 b. y) I1 [& j" h8 O; c& M& h4 O
void output(PIP_ADAPTER_INFO pIpAdapterInfo)# C6 }' Z2 c# T- v4 B
{% I6 H$ i* Z" L; ]9 j" S
//可能有多网卡,因此通过循环去判断
* @( b4 O- @+ V3 C, |" A while (pIpAdapterInfo)2 I+ Q g M; Y, W- L3 h5 u2 n
{0 D7 Z; N8 g! A y! R/ s$ c% g5 a
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
& ~) @- f; b/ [. _1 v: i cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;8 X7 H6 r$ u" S
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
, H% |( f, R# ~; Q1 s7 q for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++); T) l1 q8 ~: _" F4 R6 \! M3 [
if (i==pIpAdapterInfo->AddressLength-1)
$ T! n4 w) Z& G+ `( E {5 q* C! F7 r' e
printf("%02x\n", pIpAdapterInfo->Address);
/ _: t' _' e1 P: P" K: L+ b }
* M; e: w( R/ ^& Q% w, o else
+ }9 ~$ J1 P# c; A; H/ ^ {6 `% l* N# |' \6 {0 r1 f5 r! u
printf("%02x-", pIpAdapterInfo->Address);6 y" f6 n, S1 w/ w% V- T2 `
}
& F7 P4 a- S- c/ [# O- k& W7 h cout<<"网卡IP地址如下:"<<endl;' W: c ~$ ~* K2 ^7 d8 c
//可能网卡有多IP,因此通过循环去判断9 I: o, ?+ i. B. K Q- ^/ Y; [' X
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);6 C! U, S' a3 e9 A
do
4 q0 ~& E- X- i/ D1 \- T! w {6 ~1 c! n; o: V# V
cout<<pIpAddrString->IpAddress.String<<endl;
! t6 C! o( e4 Q! \ J+ C" n pIpAddrString=pIpAddrString->Next;! Y5 _/ N ]& ]
} while (pIpAddrString);. P# @2 v" F! L0 Q2 z
pIpAdapterInfo = pIpAdapterInfo->Next;
# j2 o8 r r; w* y! P7 v9 i cout<<"*****************************************************"<<endl;
2 C1 u$ K# K' @* ?6 q7 H# H }
! J" w) R# S% B4 b return;
7 S" g6 A* s2 f7 }' m' y}
1 a7 @0 H6 G2 t" R" o/ _ |
|