|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
- c% Y' L3 `0 j
+ P' l) a3 t. v6 R
1 h1 b3 i7 f4 Z// 头文件包含
3 i S, ^! ?4 C6 C4 b$ n+ v, |#include "stdafx.h", {7 D& y0 _8 e
#include <WinSock2.h>& I9 B( |$ u5 W! C! y0 m# a1 v! [" ~
#include <Iphlpapi.h>, F/ k+ y9 I5 I8 c9 w& Y! G D
#include <iostream>, ^' S& o3 N9 _- r& X
using namespace std;
5 Z2 E* B, X" q/ b* \1 D// 函数声明
* i' `' ^ J# R" m4 l" Fvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);+ R# L- x3 ]7 Y$ B" z
// 程序入口
0 C( \& o0 _! iint _tmain(int argc, _TCHAR* argv[])9 D; z) ^0 y/ |& D
{2 S9 D1 }4 Z- _+ ]* s( }
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息; _. o$ {; c# W* @0 O
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
3 e* r o' o4 ~6 M3 n4 P //得到结构体大小,用于GetAdaptersInfo参数
8 @( H! w' Q4 R; A, H2 \ unsigned long stSize = sizeof(IP_ADAPTER_INFO);. G6 M; t1 F3 g0 S$ C1 ~6 s
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
/ \8 C* N7 z Y0 z; d; D# Z2 ~ int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
9 i& _. q2 B% y9 S if (ERROR_BUFFER_OVERFLOW==nRel)
g0 ]- ]: \( K" T. n" q; M {1 c) w# D. E. ?9 e$ E# P2 D
//如果函数返回的是ERROR_BUFFER_OVERFLOW3 l. w- Z+ o) M* B, v8 a# Q$ X7 I3 q
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小& x& o. l+ y( L
//这也是说明为什么stSize既是一个输入量也是一个输出量3 X1 w7 M7 d/ P& E
//释放原来的内存空间
. t' M+ z% y0 q2 E6 N0 F' d, } delete pIpAdapterInfo;
2 J8 ^2 u! y0 V J7 g) d" `0 L8 U //重新申请内存空间用来存储所有网卡信息0 p) A$ U2 O2 W! H* i( g+ J
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
7 S% K& E7 u; k3 c, i //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
" p* h% |5 p3 h+ w: o1 {7 c' E nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
& ]) `) h' _! d! Q2 f0 j- S }
" L- f+ ]9 b$ N R k if (ERROR_SUCCESS==nRel)
$ j2 C! [, m9 Z! X2 } {3 F) J% B* ]1 l: E& J- O9 V
//输出网卡信息' n. w, t: r- V1 U: K$ q0 v, i2 k
output(pIpAdapterInfo);
- v1 V# \5 r/ A7 a9 Q/ E+ {' L }
* R- T3 u. k% I# q/ t8 e //释放内存空间% t7 m8 q" ~# G
if (pIpAdapterInfo)
, {6 Y% ?' r! i0 [ {
/ |9 A' p* o2 H5 D7 ~# D1 R delete pIpAdapterInfo;
* J9 e; X! R2 R! W% H }' m% b) Y) Q9 x( v$ i8 C
getchar();
$ I; a, |) `% R8 ] T% A4 O ^ return 0;
+ z8 C; `1 W7 J0 N# i- _- {$ m}
0 Q0 e* E5 t( ^7 f# R U///函数作用,输出网卡信息/ Z& B, r2 x0 F( x
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
2 p$ m; r! }0 Y6 [: b( t4 S{
' s1 q0 P, V5 D* U: v3 W& D //可能有多网卡,因此通过循环去判断/ j) f# Q8 k# p+ O
while (pIpAdapterInfo)0 g: `5 l& a+ H( C4 Q: E
{
" `# `* o# T8 m& i cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
0 V: s1 Z! B+ b, U* u3 Y cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
1 n0 {& `+ {- N9 G cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
' a$ ?+ d; j4 ]) t- w for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
0 d+ T' X5 D! `2 L! { G) j# V1 S9 S if (i==pIpAdapterInfo->AddressLength-1)
- _1 r" o+ ~* g& e& {9 F# Z& ? {
0 v# X% c0 ^/ r printf("%02x\n", pIpAdapterInfo->Address);
. S* F. X% q0 {& M/ z2 R4 y }
: ]- t8 c+ \# N; `: I( K9 l' H else0 g9 J7 ?/ c% I( B1 N" M
{7 ~1 a. N9 x `
printf("%02x-", pIpAdapterInfo->Address);
5 J8 a( I9 x% j. ~6 Y3 |) I: Q } \, m) [ C+ N# p* a. K$ H
cout<<"网卡IP地址如下:"<<endl;
3 |$ ?% r2 O* J% Y //可能网卡有多IP,因此通过循环去判断
9 i5 T/ L. k. f0 o) |: Q% E IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);& y" \8 k$ _1 r$ `7 W( |" D
do & r0 [0 v- N# P! p
{; i+ g; |. [$ u0 g/ V
cout<<pIpAddrString->IpAddress.String<<endl;
! ]) E2 [6 A$ r$ E pIpAddrString=pIpAddrString->Next;$ N K) M; U3 h4 S
} while (pIpAddrString);
- M6 Q' X# b2 h pIpAdapterInfo = pIpAdapterInfo->Next;
5 _6 v' S% V* n. @ cout<<"*****************************************************"<<endl;3 c+ t0 o6 x I4 k
}0 q) n0 N* ~: ?8 m' \0 L$ Q/ @
return;! n5 U9 }7 U) w/ h
}
; l7 V$ A6 `: C; | |
|