|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% {6 F! G$ |7 s% k
& q+ b* J; E# x/ ^$ Y# i, h9 _5 k* n6 u \
// 头文件包含
( T5 w5 f. Q& z x& g& E q) j+ f#include "stdafx.h"
+ b" Y7 ~. a! C9 o2 D#include <WinSock2.h>' F' z! o& D" u( ^8 w1 A
#include <Iphlpapi.h>( h. S$ J2 c. G; F: r$ l' N' `# f$ M
#include <iostream>
9 Q* S1 }; m m- yusing namespace std;
" D- o. n' b- @) {// 函数声明9 S8 p& Z2 K |5 K% H% }( ^
void output(PIP_ADAPTER_INFO pIpAdapterInfo);! S% q$ b# \9 l& i* ~
// 程序入口
3 e: {, N/ |3 L# t# n4 ]$ b; l) Oint _tmain(int argc, _TCHAR* argv[])
9 G4 {9 H0 m. l$ n% e, b) x{
( z) S5 S6 q- H# z //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
5 ?: l3 h3 ^2 G PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
c, L A. P% a2 s- m0 f //得到结构体大小,用于GetAdaptersInfo参数# `1 }9 W# J. ]& J9 D# U
unsigned long stSize = sizeof(IP_ADAPTER_INFO);8 c0 v, n5 N# X. I: b/ z4 J6 I( y
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量% x# W. P( r( g- S9 ?5 G
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 A' v$ J/ [3 M) Y; J; | if (ERROR_BUFFER_OVERFLOW==nRel)
2 T& V3 m9 J. }6 E( w( X7 [ {9 {. W6 Z/ a- d( a( l, u% `1 k
//如果函数返回的是ERROR_BUFFER_OVERFLOW
" s4 B# A3 ]; l3 D //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
* H# d. M0 o: T) _, h' _# u //这也是说明为什么stSize既是一个输入量也是一个输出量
8 B1 I- ~+ k; t* l //释放原来的内存空间9 Q8 |% T. A. Y |& G
delete pIpAdapterInfo;
* f4 u: b6 |2 V' U4 J //重新申请内存空间用来存储所有网卡信息
6 m0 [( _; T% _ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
Y! j; o2 }/ [1 _ //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量0 o2 |' l/ g: w% R) g/ v% a
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
- V, S' W. M* o* u }
1 ?8 D! E- U6 b. @6 G/ p; J; J& X if (ERROR_SUCCESS==nRel)
: K/ T) X" Z& C1 x( p3 M {
2 A/ [, C4 Y: ~) `$ g; x //输出网卡信息
7 P' O( k9 \$ x% ~ @* l output(pIpAdapterInfo);$ }$ d# v" p" W- i
}1 X$ T9 C1 J3 g6 J+ q+ N
//释放内存空间
9 r* j; F/ l1 z& }; k/ ?' H1 X if (pIpAdapterInfo)
! _2 `8 z: `8 `5 m {8 Z0 p/ l# L) ^9 m6 |
delete pIpAdapterInfo;
: O8 z* a O& O8 X5 G }
6 y0 {( d6 d! s8 Z: L* v! b5 |1 m getchar();
* t6 |( t1 [$ k+ l return 0;
/ a# B0 P0 Q# {' X}
5 e, ? c! E0 h9 d( X( y3 k///函数作用,输出网卡信息
. [0 U! H" W5 Z, `) J8 Avoid output(PIP_ADAPTER_INFO pIpAdapterInfo)
$ \. ?6 r6 s8 u" O1 j; b) p{
/ i( Q& x' k' m/ H0 \( X //可能有多网卡,因此通过循环去判断
$ J5 k' v# V/ ?/ s( H while (pIpAdapterInfo)' k* k# r$ ~- m9 r2 S) {0 D6 T
{0 Z% ?# r( O. D0 U
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;2 f E. M: l6 p- o/ B
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;8 x! |( z$ R% f8 \4 A3 W0 j
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;; p j' l/ x) [+ n
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)7 D1 [, H+ d$ [' C9 `
if (i==pIpAdapterInfo->AddressLength-1)# ? k* s# F) n @4 ? a
{( `8 W4 [$ c0 S3 V) [
printf("%02x\n", pIpAdapterInfo->Address);6 C3 i9 r3 `# h
}& G4 Z9 h2 B; ~, z2 H' f7 j4 T4 P
else# i$ I+ x6 P! k, g+ e4 E
{
: K& t/ R7 m, O; s" D* b7 | printf("%02x-", pIpAdapterInfo->Address);. L. n: j* h. r1 D. n
}
. T5 t8 i3 M# X A4 a% ] cout<<"网卡IP地址如下:"<<endl;5 @) z5 d' q4 S* c% o6 o
//可能网卡有多IP,因此通过循环去判断) n7 ]" ]# Z) m4 y1 d' Z8 V g
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
, K4 f( f: }+ d4 q. ] do 4 C* ]& T/ _0 S: |
{: D, O1 o' ?! P; F
cout<<pIpAddrString->IpAddress.String<<endl;& c0 a6 O6 v3 V: i- a
pIpAddrString=pIpAddrString->Next;
/ |% u0 S$ z1 b7 ~) g7 d( |( j } while (pIpAddrString);
7 r' |- \9 G) V pIpAdapterInfo = pIpAdapterInfo->Next;5 i' B/ K- o0 o/ n* b4 S' L9 Z
cout<<"*****************************************************"<<endl;
1 p1 d% v# B: I {# \' @+ Y% w }
+ Y- T0 y0 V+ G) |/ p( ?) B$ w8 f return;
" h F" D4 Z. F) s* {6 t} S( ?- N% q! V1 i
|
|