|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 _3 ?) u: p3 K6 H. ~% e
# F: B7 ]+ y( s9 b9 k5 H& t9 Z$ E, f1 l, Q4 }6 N
// 头文件包含
6 J& M2 _( z& O+ k#include "stdafx.h"4 [1 b4 u" |. Q6 U: I
#include <WinSock2.h>) {, Y: n& m0 W
#include <Iphlpapi.h>* ^0 \+ l3 m) g0 E9 u
#include <iostream>! ?( h( v2 w4 m! s" M) `1 e
using namespace std;
- ?& h8 z3 g( Y0 L; _: D! z// 函数声明6 I$ D7 D9 k3 u* n% S& C( Y) \7 V8 w( C- O
void output(PIP_ADAPTER_INFO pIpAdapterInfo);! ?; ~% U: t7 y! V
// 程序入口
+ Z% V# O$ e. oint _tmain(int argc, _TCHAR* argv[]): u$ U' E+ \# g% z2 k7 f
{# q$ _( W% Q, s3 O/ W9 b# Q
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
: q; o) u+ c+ k7 g# R! h PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
! l0 e7 { D' k$ G1 u //得到结构体大小,用于GetAdaptersInfo参数- j" l5 {8 f2 |) c" `
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
* i3 [, u5 \, Y0 a& s( Y //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
! |: c6 I' S; w" V9 y8 m- r9 q& p int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize); Z* \! F) s9 U( f7 H6 E1 Q
if (ERROR_BUFFER_OVERFLOW==nRel)2 x5 p4 x. f% {+ K5 [, u
{
0 K2 V1 j; b7 ?7 a0 w //如果函数返回的是ERROR_BUFFER_OVERFLOW
: m6 }2 v9 Z7 l //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
3 s( S/ E' U3 Q3 ~) C: D //这也是说明为什么stSize既是一个输入量也是一个输出量" ?( f) p D" a
//释放原来的内存空间: U9 ?3 N. n1 Z* i3 T) N/ e% i
delete pIpAdapterInfo;
% v' g* {( w: ^; B" I d# r //重新申请内存空间用来存储所有网卡信息
3 z2 g. {7 b: _! r pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];9 C8 Z# g% Y0 |; @0 Q0 I
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
: w. M. V& R! B# E5 N nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
) o0 u# j% w+ i3 ~ }
! @5 g& c4 X1 h if (ERROR_SUCCESS==nRel)
2 K+ |7 ]% e" w8 i; S/ Y# L" ^ {
7 k5 q5 e- `: e' H8 | //输出网卡信息% I" [ N6 y( [' j1 K! j6 D+ _2 {* W
output(pIpAdapterInfo); u" \7 U8 B1 ~. K& [7 ^
}
; C" }9 t g- c+ D //释放内存空间8 \! W: F3 @3 v
if (pIpAdapterInfo)" _2 D. _2 T& N V1 N+ Y, b
{
$ T2 o6 _/ S e delete pIpAdapterInfo;$ M# o( t1 {" }9 m2 F9 o. O& u
}" Q" u1 t$ @9 V: K
getchar();
& r; \' W) a; l. r, Z/ [ return 0;+ J1 e9 c7 o- g+ L) u# ^1 Z
}
* D0 P/ e* D: o7 l+ q///函数作用,输出网卡信息# {/ e2 r( e1 g
void output(PIP_ADAPTER_INFO pIpAdapterInfo), g8 B3 u+ P; I1 L3 T
{8 F" {% F% O! n2 X; C; T( f7 K
//可能有多网卡,因此通过循环去判断
0 p! m4 w; X c while (pIpAdapterInfo)
# E! m8 h7 X( \ {. g) ~5 E" K8 [
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
" E2 J+ b8 a) [$ i# Z" c5 j' N cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
& R* F1 B# n/ ?- L+ ^2 C cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;* d0 z2 P! Q) j
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
# O% B: ^1 m) [9 B/ E if (i==pIpAdapterInfo->AddressLength-1)/ ^' a V& \( ]3 B" Y4 m
{
l' e8 i1 ?$ F/ Y+ ^ printf("%02x\n", pIpAdapterInfo->Address);% O; ~0 D+ V0 w- m% d6 ~% y
}1 K/ F& s& l; c6 x
else4 x8 `; m% W3 }% I
{9 k: l; q# k) K5 g/ R
printf("%02x-", pIpAdapterInfo->Address);( u `! d* }! Q; i' p6 D5 Y: N
}
& ^+ ]* F, [) j' X cout<<"网卡IP地址如下:"<<endl; N& O: W- J2 d: K( \
//可能网卡有多IP,因此通过循环去判断3 q: a+ ^" x; I, @: l
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);/ \0 ~9 K: W: L3 d; t0 t7 @( s0 M# s
do ' n% S) N8 O( W( i' }
{
& d! U' J( j' z; o0 ] cout<<pIpAddrString->IpAddress.String<<endl;
& [( v) Q9 R( @8 p pIpAddrString=pIpAddrString->Next;
" V3 h4 U/ y4 h } while (pIpAddrString); U: ~. L: l1 Y( b; l: H
pIpAdapterInfo = pIpAdapterInfo->Next;/ j, }6 ~7 @ r$ U/ ]
cout<<"*****************************************************"<<endl;# V7 ?* ~+ F5 |: i
}
5 Q( o+ L8 R7 P2 l. H2 h1 F, ~! J return;
0 \1 y# ^) r! c# R$ W) B( W}
5 R; G2 l d2 F8 V v |
|