|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
5 T! y/ s* z9 [5 Y
3 B1 W- w" \5 e4 E# G
7 T5 h) s. V/ z# v: g2 S7 N; V8 \1 j// 头文件包含# G! I5 _7 y! {( \2 `: ^, F* d* R8 v( z
#include "stdafx.h"
' V) i; h" }5 E: C7 x#include <WinSock2.h>0 W0 P+ G# n% Z' e0 R
#include <Iphlpapi.h>
5 ?- i& G) L/ @. Y1 A7 ^ L, N#include <iostream>6 Y+ R9 r H6 x- P+ m
using namespace std;
) l$ R I2 N- A5 |; A) [// 函数声明
( ?9 ^0 X. U: H- Z* \0 Lvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);, F/ G8 ^6 e/ b8 U
// 程序入口
' f2 [# h' B! r1 t4 Kint _tmain(int argc, _TCHAR* argv[])9 ]5 h' T! r3 M9 K2 A/ Y
{
, f6 V) \; p3 p- ?2 W3 Z //PIP_ADAPTER_INFO结构体指针存储本机网卡信息. k7 d& k0 w- R
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
0 d( U6 c2 m- g" }7 b U //得到结构体大小,用于GetAdaptersInfo参数3 z' i, Z& f) W' l8 t6 T- x
unsigned long stSize = sizeof(IP_ADAPTER_INFO);8 T5 i6 {- U6 n! s6 `5 ?/ b' w
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
k5 Z* |! @. S0 m ?8 l int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
( y6 y9 K0 u4 `+ | if (ERROR_BUFFER_OVERFLOW==nRel). a/ L% K; Y* m3 N2 ~( A( B {- j
{- R7 N5 C5 z% h2 [8 E; f1 F
//如果函数返回的是ERROR_BUFFER_OVERFLOW% C, `! D0 _2 K* ?. G. T
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小1 m- l4 S- a! J3 ^( X
//这也是说明为什么stSize既是一个输入量也是一个输出量
; t& v+ l# T+ I" _# M) [( P7 E //释放原来的内存空间
5 s3 C7 ]/ {" P3 n( h0 P% ` delete pIpAdapterInfo;( C3 R/ V b2 c; q
//重新申请内存空间用来存储所有网卡信息
3 g8 e2 n( J% f8 K. p pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];7 y$ _0 O7 B7 `" O; ~+ \
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量- y+ N$ G: ~" U8 Q
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
3 S- h0 u1 \, W$ @4 e4 O6 ?+ Q- X }& R) w1 I$ R U9 [( n4 p
if (ERROR_SUCCESS==nRel)1 ~4 f% L% A9 f3 |. @5 L
{. D1 B8 B* K {5 g, I* l( d* |7 ~
//输出网卡信息9 l( D; _5 D; B# T6 c1 R
output(pIpAdapterInfo);6 C, t6 i6 s* }- D. M
}
' G9 F$ V0 V& A) J" b( V4 N* U //释放内存空间
2 s, b9 h0 m3 _: {$ c if (pIpAdapterInfo)
% s) ]9 Y1 |4 R9 N+ Z {
7 [/ Y2 |$ w+ H$ c delete pIpAdapterInfo;
V; ?* A; o8 T. K5 J8 ` } }' W2 Q9 n3 K1 A8 k/ ` Q: p, S
getchar();
7 {; ~: k, S) ~ J9 K5 o return 0;
b, e$ {6 h7 s0 |}( w' ? U* }; e% p& C
///函数作用,输出网卡信息7 [, @( [. A- o! r; ~' i
void output(PIP_ADAPTER_INFO pIpAdapterInfo)% L# }6 {$ l8 S( F% {9 v8 [# I
{
. u0 i- A4 t' @, k& h O. P' Y* i //可能有多网卡,因此通过循环去判断5 {: R/ f2 K# H/ a; M# o, [
while (pIpAdapterInfo)- P- G/ h1 y& Y
{( n1 \# e& E# i8 V: Z9 u5 d+ G
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
9 I2 M, f' T' |9 _& }3 ]+ } cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
/ b7 {6 z9 R4 K& l cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;/ L0 K! \% ] Y3 |( m
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
% f/ j. D2 ?4 P if (i==pIpAdapterInfo->AddressLength-1)" [9 D; ?$ s, Y
{
9 U' X* O; l; `6 S printf("%02x\n", pIpAdapterInfo->Address);
4 S; W* j0 T4 L" {1 w }3 X! ~5 n, {7 z0 \
else V, k3 D0 _9 d6 ?. v2 r* z' ^3 F! b
{1 q; B6 N9 V& s- g- }, h* N
printf("%02x-", pIpAdapterInfo->Address);
- c- c( S0 G! B' o& r2 p( K2 G& H }, @* e) ~1 |1 E" [
cout<<"网卡IP地址如下:"<<endl;1 i# x% O9 k6 H' E4 |) B
//可能网卡有多IP,因此通过循环去判断
1 ?2 X: t/ t, {( Q# d, \' ^3 |1 `; V IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
I, R+ p8 P1 i b* y- l8 R" \ do . K7 s: Y! p7 P! ~. L: D
{
( X0 h) e' K! ^7 @" k! g: @ cout<<pIpAddrString->IpAddress.String<<endl;7 R) d, E! K, `" p1 l9 M* R) n, [
pIpAddrString=pIpAddrString->Next;! s1 M3 F: P+ Z* Z
} while (pIpAddrString);
S9 r \% B! n& s4 y+ z& J pIpAdapterInfo = pIpAdapterInfo->Next;
' g1 x( W; ~/ ?3 `( i cout<<"*****************************************************"<<endl;
/ ?/ n" L+ [% c2 e4 L }: Z6 a4 o0 e9 N9 u
return;+ E2 M6 i8 ?0 p9 U3 g
}6 M9 N/ i* C) d3 N ~% K0 e
|
|