|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 P1 [0 m! D$ Z+ I0 {, B! M# M
4 G+ k2 X# d8 ^& h
2 r* y' H0 h3 i0 S% l3 E// 头文件包含 w, w- x( R+ K: G9 d
#include "stdafx.h"( E8 X1 q7 e& x; @/ y
#include <WinSock2.h>
7 n0 T: q0 `$ K! B. }% R#include <Iphlpapi.h>
% _$ B9 a& r! g3 F, x& A#include <iostream>* C& e( O$ P* P* a6 n* o* N" r# f
using namespace std;; _& Z3 A0 _- W0 {8 E' p6 D
// 函数声明' V/ l1 e" t: b! r; r
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
0 _3 y: T. i! l' _// 程序入口0 z( B1 G+ H# K: s5 T
int _tmain(int argc, _TCHAR* argv[])
0 F$ W5 e/ n1 Z6 u: ]9 V{
6 C! {' {: l, G4 j% G3 k2 C& C# W //PIP_ADAPTER_INFO结构体指针存储本机网卡信息! X& t: j2 x# S' b3 C
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
( a/ h! R, M2 U/ U //得到结构体大小,用于GetAdaptersInfo参数 i6 W0 f6 h0 L# B* c8 Q
unsigned long stSize = sizeof(IP_ADAPTER_INFO);2 w; r M, G: G: l& d- j( Z$ w7 t
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量( l7 D& }) a! u9 D: p5 L
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);' e+ _ m. d' d
if (ERROR_BUFFER_OVERFLOW==nRel)" {! C# X) v# s; Z. K" q
{! \9 M: W9 l6 f3 c% r5 x( O
//如果函数返回的是ERROR_BUFFER_OVERFLOW, J- b* K0 {5 x2 ~3 D3 i1 j
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
M: B; ?5 B: H) m& }$ Q //这也是说明为什么stSize既是一个输入量也是一个输出量6 r3 P/ b2 r' n4 R
//释放原来的内存空间" H* z% T+ C$ r" V3 \8 {" R* Y
delete pIpAdapterInfo;- ]" q$ C5 L& o; h' |
//重新申请内存空间用来存储所有网卡信息3 h1 z9 B/ s6 O7 z; ^/ n# v: I3 K
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
- t& a6 [* L( B7 |- g //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量. E5 ~: k3 w7 S+ @4 r
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 _$ n3 f3 y% C2 M }6 E6 F! ~3 G% p! {9 n% h$ z2 A( S
if (ERROR_SUCCESS==nRel)/ N% l) ?2 t: B; [& f/ n& p
{/ _+ h8 i7 ^: K' o. V
//输出网卡信息5 Q+ o1 @2 i& r; y
output(pIpAdapterInfo);
# C# `6 Y4 d% f; p" d) }' y2 Z! r }0 V0 ~/ z& i0 x6 v& i- d
//释放内存空间; x" n, B: P) ?$ M+ T, i( I1 K
if (pIpAdapterInfo)+ k; q- ^( |# ]/ ~3 H3 c! V0 Q
{6 |1 \- X' _% ~) n% ?( V% j
delete pIpAdapterInfo;
T, b. G; @+ ?9 z8 i" ~3 s3 ]- G3 @ }
! [( y" u7 i* n8 g: m getchar();
6 M( i2 \0 {& {, s7 z return 0;: U* B1 s% R+ _3 n" A! M) m
}
2 G! G( p& I! t9 u' Z$ E* O2 h0 o6 q: S5 o///函数作用,输出网卡信息2 t: U# p/ r" z, K! l, } A: z
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
9 t6 J- N- c- L2 k8 i- P6 c{! D6 b: f+ I( i
//可能有多网卡,因此通过循环去判断
/ Y2 o3 d# n: ?; a J5 f1 l9 G while (pIpAdapterInfo)1 S; w& x! t9 {- {9 I3 a8 C6 a5 n
{
- T" K& F- _% c' ~" Y cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;' L8 y# a6 l, _4 |" d
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
+ \8 W# y& | J/ | cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;" W6 p& o/ Z- E+ t z6 c9 D
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)# u8 h/ Z) \( G1 K& Z/ z5 V
if (i==pIpAdapterInfo->AddressLength-1)
+ g4 F8 B# k N0 p# q {
. B4 S, p0 v. S% H printf("%02x\n", pIpAdapterInfo->Address);
2 e* Y! `" {# _ }( k6 H4 C5 a( Z/ ?2 [
else
. G8 W9 T$ O: A {- ?, Y( J0 j$ E* d( f9 _
printf("%02x-", pIpAdapterInfo->Address);2 ] M1 u9 _9 e- g+ O; _1 ?
}& G# R1 y$ O7 N# z% e3 E
cout<<"网卡IP地址如下:"<<endl;
. Z+ { B0 o; J //可能网卡有多IP,因此通过循环去判断
' r5 T8 @: o7 k3 ^# e- a! e IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
- S' S4 F) Z( d) I8 R/ s& @- W do
4 z, G# q$ K7 I. \) ?* W {
2 W' h+ K- N* w2 L+ c* A; T+ M cout<<pIpAddrString->IpAddress.String<<endl; r! S( O0 l6 _6 S
pIpAddrString=pIpAddrString->Next;+ G5 w8 h8 {4 p( ~# ?
} while (pIpAddrString);
8 ^+ Z; G" L# N4 d0 I pIpAdapterInfo = pIpAdapterInfo->Next;* s5 m" o1 d$ j5 F- @
cout<<"*****************************************************"<<endl;( L& E+ n2 L2 E4 h# B! W
}
& r9 G C# F0 B0 Z* L: c( m return;
8 e. W% P8 t1 V/ x; h) I0 x}
& q' F7 m+ d8 h- Q |
|