|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
0 x7 _2 U# D6 g3 K6 c3 T( y4 ^9 ?1 h y% N n
- W# {; b# o. N: x' }9 A: \5 R// 头文件包含
' R, P. W ^7 t8 ^: N$ j! {#include "stdafx.h"% V" a* c- G& v+ O7 m+ F
#include <WinSock2.h>& K9 ~, a# _8 n( X0 O- X: {
#include <Iphlpapi.h>) P; H- H( ~% ~, Y/ ^+ S& R1 d, U) Q; Y9 Q
#include <iostream>8 k4 l0 l8 Y0 T/ J1 z
using namespace std;
2 N% I3 q9 B1 o+ {" v) a; y& f// 函数声明
& H+ b- @3 A# ^8 R: `( q, Svoid output(PIP_ADAPTER_INFO pIpAdapterInfo);; n9 d+ ^" q8 J. u: l2 p5 o0 U, i
// 程序入口: \$ V" J+ ?; d F' C# u
int _tmain(int argc, _TCHAR* argv[])8 _0 m! Q) r# M7 M
{
; o. f1 ~! V( o5 \$ L: V+ k //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
( g/ U/ @, [/ l9 i& l e PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();4 F$ V9 h+ d5 b: R) n9 W
//得到结构体大小,用于GetAdaptersInfo参数
u# i! l$ x2 f: X unsigned long stSize = sizeof(IP_ADAPTER_INFO);' j( ~1 i* X0 M) \
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量$ _; t: K7 w/ v# `2 M# u
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);+ @/ i+ k% V# y' X" [$ b
if (ERROR_BUFFER_OVERFLOW==nRel)
9 g% a: d p s) E: S* ^3 @7 @ {
( e4 Q: c+ P, |7 n //如果函数返回的是ERROR_BUFFER_OVERFLOW j$ P" ~6 P8 {/ U( @; D5 Y
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
* u+ U3 M; M" A' R //这也是说明为什么stSize既是一个输入量也是一个输出量5 p" Y6 w- L/ ?4 o
//释放原来的内存空间5 _5 X3 g& ~. x; m5 g- }& r
delete pIpAdapterInfo;6 w v2 c8 J0 r: P# {2 U I
//重新申请内存空间用来存储所有网卡信息
8 ]* ^& M$ {' K' U* T6 p9 [% y pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
' L/ [# P) r: p //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量/ K$ S; d; B c5 O( s
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
, W9 s) b. j1 t7 J9 l9 t }
6 E3 i: Y8 M4 ] v- d8 Y if (ERROR_SUCCESS==nRel)* w. K0 t- M& s2 P; b
{$ i0 {; w# @4 y
//输出网卡信息 C0 K5 \9 B6 T6 A
output(pIpAdapterInfo);
) t! [3 }" C( A3 O# V }
/ I( c& r) R+ ^- X+ q //释放内存空间, e% b; k, F- L0 D
if (pIpAdapterInfo)
$ q# L, w8 J2 {) U. m {
' M2 a! a, T& c& t$ ^ delete pIpAdapterInfo;, V" i; M7 n5 s- y K- c) T* ]
}
5 A: m. j" F& l6 Y getchar();
' [" F4 [: p/ t; ] return 0;6 O; u4 Q5 P! m; |. j* S: \$ a
}4 @5 t/ p- k8 @0 a/ }2 x' [
///函数作用,输出网卡信息
: f4 R% S5 H/ [, \; x( [void output(PIP_ADAPTER_INFO pIpAdapterInfo). q8 Y! Q, H6 R* { n
{- e0 z# _9 k9 n5 o) j% L+ M
//可能有多网卡,因此通过循环去判断
) u1 u r& W3 \( G4 ? while (pIpAdapterInfo). G7 S4 J4 T1 w
{
0 V6 z6 f4 y5 P* `6 r cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
. L5 W- x) T, h4 n- z, W( |/ i cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
( G3 }6 ~8 X! }& v9 ?' @ cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;. G' S- x9 |& |+ [: m2 |
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)9 _# P, m2 P6 u4 u$ h( w' F+ c
if (i==pIpAdapterInfo->AddressLength-1)% f. T1 u v7 H) S! g4 j
{+ T0 ]$ Y7 N# e* p. `3 l
printf("%02x\n", pIpAdapterInfo->Address);
4 W( V& Z1 ~1 Z; ~4 i }
2 v! Q: _6 M6 ^/ ~. J) J else
# {& e4 `( q) x8 H! M5 R/ o: @9 x {- A, v: ~4 J. ^! f8 s4 U$ s
printf("%02x-", pIpAdapterInfo->Address);" _' w6 b" G7 k. ^$ f
}
5 O+ q& b1 ~8 }! w2 M: q! s cout<<"网卡IP地址如下:"<<endl;" b4 S* K, J' o2 _8 [- U
//可能网卡有多IP,因此通过循环去判断) q3 e, j; q% h! a% P
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
& ^" _, v* E* Y; Y$ e do 0 r g; ^4 f8 u( ~; F' Y
{6 a+ |+ y! d1 o! K
cout<<pIpAddrString->IpAddress.String<<endl;& U: ]- q- r- v& ?- Z
pIpAddrString=pIpAddrString->Next;
0 e) |$ r7 M( E6 { } while (pIpAddrString);3 e* c/ s( c. m" f
pIpAdapterInfo = pIpAdapterInfo->Next;
7 d g! n5 C, U. Q K4 U" W6 i& ^' h& q cout<<"*****************************************************"<<endl;
$ N- c* @. R2 K4 s }- ]+ l3 K) ?1 ~/ ` F( i& p( {" a
return;: H, G- @0 b \ x/ G, M
}
T b' A) T2 M5 w4 H |
|