|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) E% F7 m$ V- U# }
+ C+ r' I/ a7 o R! J/ _
, x: ~! l/ F/ i K// 头文件包含0 J" [" g% T. O+ B
#include "stdafx.h"# Q$ T6 h% A4 S) F" [( z( l3 e
#include <WinSock2.h>: s4 v# y5 r# \, J; `
#include <Iphlpapi.h>
, E. U3 C$ w. P) ~$ }- f" Z/ S#include <iostream>
/ N! U3 c' N) S. F2 qusing namespace std;7 @: D8 z( ]; g e% V# T
// 函数声明$ B4 q0 R* [1 z- A
void output(PIP_ADAPTER_INFO pIpAdapterInfo);! y! b! p f }* n/ R: a# a
// 程序入口/ d: ~' |. H: r1 I
int _tmain(int argc, _TCHAR* argv[])
/ ^" ^% j; N- k5 B{
/ L, I' f) y$ V( x //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
6 c8 f3 ?8 s9 k8 F PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();! R. d3 k& ^/ ?
//得到结构体大小,用于GetAdaptersInfo参数% `. `. X# p$ v+ O7 n1 N
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
( D% _3 Y4 Z) z //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
( _/ @% A6 M/ l8 f1 Q int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);: T/ K2 n1 k0 M! z" r- Y- a
if (ERROR_BUFFER_OVERFLOW==nRel)& ]- I/ d7 W0 w0 H& {7 ~
{& Y3 M9 O) K' b: Y, z* U$ h
//如果函数返回的是ERROR_BUFFER_OVERFLOW
, Z0 Y/ C7 j& W% u2 i" y2 ~ //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
8 O2 [1 y8 H& V+ m& W& d C( p- F/ J# G //这也是说明为什么stSize既是一个输入量也是一个输出量1 b" a+ r# \6 |: e
//释放原来的内存空间1 A0 {1 [$ E& T( n; c8 u
delete pIpAdapterInfo;
6 @$ b) A3 Z/ V- R. U6 x //重新申请内存空间用来存储所有网卡信息
% n" k* B2 w' Z: {: _8 @ pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
4 q) y! s; B6 o2 X/ O6 h$ e //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量& Q% k( A3 g/ ~
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
$ v2 k. a7 V3 p0 q4 a, r }9 k" @8 i" X/ {
if (ERROR_SUCCESS==nRel)
% F3 Q" c+ |5 T# B2 a6 u/ W9 C {7 T3 A4 b/ U2 h% P& m+ y+ s% j
//输出网卡信息7 z* d. v$ E: i9 Z; _
output(pIpAdapterInfo);- I, X1 V& ]! |* v4 v- q
}2 }/ @' Q9 v1 H. j- A1 Y% G% {) U
//释放内存空间
/ M# V3 \' a. x) d, A. u if (pIpAdapterInfo)6 v$ K4 b( d" A& d9 [
{6 X0 P! x, y6 n* h
delete pIpAdapterInfo;1 ]$ s* g9 p4 Q9 U: A
}4 k& g9 V& G7 V0 R4 a
getchar();# z8 a: \3 c) h C! ?* ^/ x
return 0;7 c7 n; z5 B! m% Q! {
}" c) F5 [3 ]) q% t6 P
///函数作用,输出网卡信息! t( f5 Z) p, [ Y/ ^0 m. ~6 h6 ^0 R
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
$ N [6 ~) }& G1 S, m2 v6 |) z8 E{
9 @2 n9 C8 _' {8 S o' m; v //可能有多网卡,因此通过循环去判断
, k7 O1 j% ]! u+ L while (pIpAdapterInfo)/ s9 ]# N7 k7 ^9 ]
{
) ~: r' U/ h9 H cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;& e4 B$ O! Y7 R" Z
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
/ Q+ M) [7 Q2 q cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;6 m( p3 d# {0 N4 A" F) p' |! f
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)# P4 J# K) x! `: l
if (i==pIpAdapterInfo->AddressLength-1)1 D2 b" i8 x0 N+ a7 N0 S& B4 W
{5 }8 M4 V* T2 x/ ` x; s6 n* H
printf("%02x\n", pIpAdapterInfo->Address);0 r3 v, W, ?/ _. V! u; x$ h9 m
}
) M% m& M8 a& j7 z$ O else
/ O8 x" b* i9 Z; K8 b {
2 {; G0 V( z0 R b9 S5 `1 J printf("%02x-", pIpAdapterInfo->Address);
+ U. u) U7 }- B3 K0 b' ? }
9 P# g% j4 S5 S. w cout<<"网卡IP地址如下:"<<endl;9 H" ~8 y% _& _ t4 e0 n
//可能网卡有多IP,因此通过循环去判断+ o$ A! \) Q5 g( m; P- @
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 Q4 ^& O, \, k. ]5 K* f0 z do 5 ?& A' _) q8 T% f& z2 f! A
{
6 P3 n9 H, i! J" R, D cout<<pIpAddrString->IpAddress.String<<endl;" z+ X* |6 O' M# E9 m/ g _
pIpAddrString=pIpAddrString->Next;
/ v$ q/ O7 I& F! E% a) N8 j } while (pIpAddrString);
# ~7 c" F' }4 u) O pIpAdapterInfo = pIpAdapterInfo->Next;5 R( w# X# ^6 g
cout<<"*****************************************************"<<endl;
3 U3 W1 P$ s8 Z" ?) [8 T }
1 O3 H- R& H( V% ^8 |8 n return;
' t s7 \' _& [5 j}
* R5 i, _2 Q7 i8 k |
|