|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
# w! M3 x- J0 E5 s* I+ E( f* [ h0 r% H+ F+ Q v2 r
" [# `0 e& f2 `5 N& v4 r- U// 头文件包含2 K' [/ e; r9 K, Q& k7 l
#include "stdafx.h"
0 g8 D! e/ h7 I3 J6 ]6 f#include <WinSock2.h>$ v2 K+ x* v8 V% D: p6 H
#include <Iphlpapi.h>
! [3 D! ?2 r' n% E7 A2 E#include <iostream>3 {; l, h& r$ x' [. ~
using namespace std;
8 m; ^5 l2 h/ W/ ^// 函数声明% K% S: D% a# x% B- k+ a. g
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
G" w# o- z/ }, [/ r0 l// 程序入口
, e8 s& E \* ~! bint _tmain(int argc, _TCHAR* argv[])
V/ h7 {# n2 X4 a6 z3 c{
3 |, b9 C. I6 @* T //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
6 N7 W: ]+ _! N) x% @ PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();% V$ O' p. [+ Q: }
//得到结构体大小,用于GetAdaptersInfo参数* n$ s% X1 l0 ~; G8 m
unsigned long stSize = sizeof(IP_ADAPTER_INFO);! u5 @ I, F8 q7 H; \. T
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量0 \. Q5 W1 F/ C+ N- \
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
+ E. J9 _! ^" t) b2 q. g if (ERROR_BUFFER_OVERFLOW==nRel)
3 w" e4 p& E# }7 G6 m- H* T {" z Z) \% Q% W! k/ j. _
//如果函数返回的是ERROR_BUFFER_OVERFLOW O, `. k" L: Q
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
0 b+ b* Z2 @- r6 T2 C. d( d& b //这也是说明为什么stSize既是一个输入量也是一个输出量
- ]0 ]* {7 M0 Q& a //释放原来的内存空间# K0 F; {3 q6 v7 E- a( V
delete pIpAdapterInfo;
; y$ G! Z" n& S3 p$ R //重新申请内存空间用来存储所有网卡信息* p/ Z0 b6 a" k6 A# Z- i2 C
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
) d9 U+ h6 t* ~6 } //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量9 z( o4 g# h% a* T/ d6 I; V4 L
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
2 T3 l1 N0 U+ b3 s8 I }7 m7 E9 T2 X8 N; ^2 @ }
if (ERROR_SUCCESS==nRel)
9 T) l5 a; {% k0 U; | {
/ {( Q, g( c) r //输出网卡信息8 C* o' o! s4 d0 S
output(pIpAdapterInfo);
' U0 G& @0 ^7 ^6 }) f4 O }$ k3 F/ D/ w5 h2 {) B; \$ q$ K
//释放内存空间0 x- v# y2 S# ^
if (pIpAdapterInfo); y( }' H% ]- e0 X9 k% p
{5 G0 G( w$ H; ^* f# N
delete pIpAdapterInfo;( G$ ^6 A; n1 _
}& E6 s2 }& k- C2 u8 i+ N
getchar();9 T/ a- v4 Z- V: i$ S l( F. [) v ?
return 0;( h6 G( ^2 \, i8 f
}
2 z& G7 I2 m/ u. L///函数作用,输出网卡信息
" }5 F1 l, Y. c' f" n- nvoid output(PIP_ADAPTER_INFO pIpAdapterInfo)- ]* g X5 G0 \; d0 U3 G4 n
{$ c+ x. q! |& c8 |+ m: |
//可能有多网卡,因此通过循环去判断6 ^7 Y* r( _- d7 q
while (pIpAdapterInfo)
' A9 G" ~- d8 l* `0 F {" [' t1 E- j, `3 q6 i
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;! H2 M/ X/ g# S$ Q" @. Z
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
4 R5 O4 Q0 r: u4 D$ \9 e( e% D4 E# s cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
. C' f# y6 Y1 P for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)# h ]4 a* B' z
if (i==pIpAdapterInfo->AddressLength-1)! t$ Q0 T1 D5 d9 f
{8 o& L; K+ M5 ~7 P7 d# d- p8 u
printf("%02x\n", pIpAdapterInfo->Address);3 z T; ]1 t; `$ R0 t; l
}
* m$ q" ~5 g" A" G9 N else
h2 a" h- [$ R/ [( G; o" f {' t+ j# X% G {9 r; a) ]
printf("%02x-", pIpAdapterInfo->Address);; i& c9 Q* l2 Y) P9 n
}( Z! |" o5 J3 j' }+ |! k8 y
cout<<"网卡IP地址如下:"<<endl;
& Z" d* T! H5 _6 s0 S: L4 A. N //可能网卡有多IP,因此通过循环去判断
1 \ q7 M3 D/ M: W& R0 R IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);6 Z) _; L- V* |1 J9 h$ |
do
. T* J* H- B, b) T% O+ A {
( a X. g1 I9 G7 L/ T cout<<pIpAddrString->IpAddress.String<<endl;8 Z( t4 w! Y) q' @( u
pIpAddrString=pIpAddrString->Next;7 N- O) L. T- C
} while (pIpAddrString);7 m @: Z! I: m R8 E* C9 P7 C7 U t1 @% x
pIpAdapterInfo = pIpAdapterInfo->Next;
- O9 G" y3 S: B/ H7 w7 P* K; O. S cout<<"*****************************************************"<<endl; e; @+ g }" V, ^5 q* u% J* C
}* G' C/ ~: A2 V6 L3 J! ^: r0 l4 u
return;
7 y$ r$ C$ T3 e# j( h5 C}) w5 L0 Q; ]) t. i0 I' e+ l+ h
|
|