|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
* k, N4 ^8 K: i: m7 @/ C
+ M8 B" T4 Q" [) ~. ?, x! u: Z$ h% A) m9 F1 S2 l
// 头文件包含
/ q1 j) m) [. b$ I n, G7 r#include "stdafx.h"
; R. M5 M# J) R3 A. c; v#include <WinSock2.h>/ h) n' J9 K; H& {$ g" P
#include <Iphlpapi.h>
* Y& j3 o# _5 G8 i! V! i6 G#include <iostream># o8 V0 @3 T. @" ^+ n1 @7 D( T
using namespace std;
0 y& a: S5 d$ u# s// 函数声明* k& _9 C. M) N& d8 ~1 F6 S: [
void output(PIP_ADAPTER_INFO pIpAdapterInfo);! @% X8 k- n* q, J, [" \1 B) ~; V
// 程序入口& S. {( v/ r- c/ c
int _tmain(int argc, _TCHAR* argv[])' i. M7 H. v' S/ p8 q
{3 |2 ^, u( q' N& L$ M2 F/ q! b
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息6 _ d" s5 d! i4 P
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 n# |& t O' v3 ?& |; X //得到结构体大小,用于GetAdaptersInfo参数/ m: L" U, @" @+ G
unsigned long stSize = sizeof(IP_ADAPTER_INFO);; g3 |% ~5 T" ~! D
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量- n1 |) l& ~# O
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);0 h1 C( J( }' B* D) X4 u
if (ERROR_BUFFER_OVERFLOW==nRel)9 V- G3 Q3 z- y0 [
{
: V2 W i5 G4 V //如果函数返回的是ERROR_BUFFER_OVERFLOW) g! g2 }. I* g
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
- H H( `0 U, G9 p$ ~ //这也是说明为什么stSize既是一个输入量也是一个输出量
: j9 |0 P' \. E# }: D5 i //释放原来的内存空间8 K& z8 D, w5 W; u+ y8 _6 i
delete pIpAdapterInfo;
% ]$ Z, f' y' _6 U3 v& p- t //重新申请内存空间用来存储所有网卡信息 g* B2 `3 O2 Q h2 y0 L3 T
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
: e3 K8 e8 V; s$ ^, Z9 F2 o6 y0 Q //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量6 @, `; R- k) f2 D
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 9 k) }$ y- c8 }- S- A
}
1 t4 @0 P6 Y9 i5 k7 c% E if (ERROR_SUCCESS==nRel)
% s, q8 j. ?9 E; J {
' e, B) Q- m0 o6 i //输出网卡信息+ g* V3 I9 t+ S( J& v8 n3 J
output(pIpAdapterInfo);
* l; _$ Y+ O, {" z; s }0 ]* s/ J0 N% f/ x8 @
//释放内存空间- K$ {) O- Z6 H6 H- z* C; k. b/ R ]
if (pIpAdapterInfo), F% I ^# n+ y v* b3 G
{# G4 C9 Q) K. ?+ i: e
delete pIpAdapterInfo;
g) E$ d! m! E( f( X }7 S4 a& U' S! ~
getchar();% k' E# N" G- h( {2 X" X' n
return 0;
7 ]2 s* J2 Q1 r! L0 m}8 I4 j# C* Z2 \2 q
///函数作用,输出网卡信息
A' c. h' h4 `/ i0 K Dvoid output(PIP_ADAPTER_INFO pIpAdapterInfo)1 i, r. ?" w& F$ X4 Y
{3 o% U; y7 N0 k- h- p; }' \# x- K5 E7 p- B
//可能有多网卡,因此通过循环去判断
- H" |4 H* M; V while (pIpAdapterInfo)1 Z& I6 S8 I @ u
{
. @% P9 ~" P$ t* R( C5 Y2 q2 f cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;" K7 Q- l) U8 N# z$ ?! m
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
; b" ?0 I4 _7 \1 K cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
. m" y: y ?" M" r+ {% X2 K9 E for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
9 @0 ~$ B" B" q- c' }2 m" O if (i==pIpAdapterInfo->AddressLength-1)# z, F) P' c x0 l7 }4 L
{% n/ v7 W+ v1 f5 i7 |4 c
printf("%02x\n", pIpAdapterInfo->Address);" z# Y9 B+ X8 m# m4 A F$ N# u
}
" N! p! v1 B0 q M, ?4 d7 }$ D5 @ else! |3 O: D3 k* n4 u# v0 E
{
; {/ n* j \# {# @# v' R' Y/ B" r# K printf("%02x-", pIpAdapterInfo->Address);
% B+ F) C5 l4 x- d% c }
/ O0 }( @' D& R) c% r2 w8 A cout<<"网卡IP地址如下:"<<endl;
% S- M3 f$ a. ~: ? //可能网卡有多IP,因此通过循环去判断 C0 ^: r1 a2 S$ ?- E9 u, l! S9 i
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
( Y1 P1 V1 r( l- h: I8 o do
/ d( t, j0 z% t {. D* T X( ?' [$ x+ {# i( ?' \
cout<<pIpAddrString->IpAddress.String<<endl;4 }1 Y& c2 ^8 U! r4 j% F, N1 D
pIpAddrString=pIpAddrString->Next;
1 C3 D- J* D+ @. K } while (pIpAddrString);0 C; n! U% ]4 U+ E1 `% b5 S! \
pIpAdapterInfo = pIpAdapterInfo->Next;! u& E& u& r r6 T5 U
cout<<"*****************************************************"<<endl;1 x, i6 b2 C: x1 R- a
}
% K3 u8 z2 @$ ]4 L: o5 c2 q5 a) f return;% T S; y& A. A" L3 b, l
}6 M! P2 c5 \& w' L; ?9 f
|
|