|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. {8 f7 ?# @7 C( L5 T2 d& s* g" l
9 c! u1 r. j, L; p% {2 `9 v
/ O: Q. y' ]- u7 {4 w" X- c O// 头文件包含
- F# l+ x8 M& p9 t$ [# B#include "stdafx.h"
' ^1 C# b! H4 ~8 _" s" }0 O#include <WinSock2.h>
. _5 D; B! @1 [/ [' T: l: Y#include <Iphlpapi.h>
m% g f# k! f: X2 [# k#include <iostream>0 E+ y3 d. G Y+ A+ C- q
using namespace std;
; @4 m1 j# y& {% H& m5 l// 函数声明1 |3 e- L, I) r# v# O7 N: Z" C0 T( R
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
( C2 }) w1 z8 u7 [// 程序入口
, w* G4 r; T+ X3 W4 dint _tmain(int argc, _TCHAR* argv[])
3 {2 Z4 Y+ `2 L{
( O0 Q; k; ^: B) z8 R% a- w //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
3 J" \" A: W/ J( K2 z PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
. x- i9 M6 N! m$ Q" ? //得到结构体大小,用于GetAdaptersInfo参数
; s: ~+ z! C; ]" x unsigned long stSize = sizeof(IP_ADAPTER_INFO);7 c& t* f5 H u: p |3 i9 i7 D1 C
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量5 ^2 t# k) q) p. _" n Q
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);% t2 }0 h# U4 N; [# J5 g, q
if (ERROR_BUFFER_OVERFLOW==nRel)
3 z8 O7 {+ h, \ {7 [4 C7 g5 M; G8 |3 i
//如果函数返回的是ERROR_BUFFER_OVERFLOW. Q8 C% C: q4 q& n
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
% z$ g5 c1 E8 V6 f( L) H //这也是说明为什么stSize既是一个输入量也是一个输出量+ n- P/ k; [5 z0 ?4 Q! Z' ^
//释放原来的内存空间, V* f! {3 G* T
delete pIpAdapterInfo; Z, i0 o: M# t1 M0 b% F
//重新申请内存空间用来存储所有网卡信息
1 K/ R' q( t- W8 r: i pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
! S7 r, d. W: i/ `; G" K; e //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
! E9 B, O, K3 s H nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); . D8 _8 h, O7 } y) `$ G: M5 E
}) g: I+ ~2 d! L" g- {/ j' K
if (ERROR_SUCCESS==nRel)4 x# g, m6 m: h- H( m1 G' Z
{3 Y4 l4 g5 b- P1 o9 J% L' b0 l" I
//输出网卡信息- h2 e- c9 i+ w) X7 F0 t2 n
output(pIpAdapterInfo);
: ^) d9 W* o U }4 X/ U. f% `8 l
//释放内存空间, Q* t$ k; H/ Z# c
if (pIpAdapterInfo)' \% k; z) u" u2 K7 B
{9 e2 A6 M* L* f, N8 A( J
delete pIpAdapterInfo;/ \: U/ t _7 R
}
3 T9 A+ ~& W* A+ i/ A1 o. ] getchar();& L7 E# L4 }% C: S# s: R
return 0;
) a. O1 B) m$ S/ j. m* H( ]8 k}
7 P! s" ] v# i) U3 U* l///函数作用,输出网卡信息/ [( T! H6 x- e' _, U% y" J
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
( h- r0 _3 [1 U8 W4 c: o% @{
7 L* o+ V$ C$ p! E0 l7 Z0 q3 Y //可能有多网卡,因此通过循环去判断0 r* D0 g l% b# G
while (pIpAdapterInfo)
# H( E* Y& O2 {9 o7 ^- K {/ x' w% ` e/ q# \4 p
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;7 Z; k% f$ R f% ]
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
3 V9 ? p8 `% r cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
7 P! l/ N9 z( {* {5 k for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)7 k4 s- W. y4 {1 [, ~' V$ T1 n
if (i==pIpAdapterInfo->AddressLength-1)
) B0 l* }# Q8 u6 @+ w6 h; V {
$ a$ Q' }; A2 z! P0 D, l printf("%02x\n", pIpAdapterInfo->Address);8 P8 m) B) L7 m2 R
}' k+ r% @; v5 w! v& Z
else
8 W: p7 [* P$ @% X3 S' @! {# |9 G {2 f( q/ v: N: Q
printf("%02x-", pIpAdapterInfo->Address);
, `9 m) w& }" F. N1 v4 D) N$ P" [% R& Z }
! e# \8 l( ~) s! _" T* \7 O cout<<"网卡IP地址如下:"<<endl;4 I. b, ^, g# t% ?4 C2 r
//可能网卡有多IP,因此通过循环去判断
8 Q2 K8 P( m# o4 K7 Z j& \ IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
- ` b3 l9 ]8 m3 o# y do $ _, ?2 o( W; f
{4 ~% u7 q! X: Z) p+ C
cout<<pIpAddrString->IpAddress.String<<endl;( ~8 F% U3 a: f5 k+ B) }6 [. w
pIpAddrString=pIpAddrString->Next;
. S/ [6 r. x& t F. a8 n } while (pIpAddrString);$ H! C5 u) C8 `) L c, m
pIpAdapterInfo = pIpAdapterInfo->Next;( ^+ X9 ?6 e5 s3 \; B- m6 H t4 c
cout<<"*****************************************************"<<endl;
+ U( g& w4 K. K! `) M8 m' Q3 \ }7 K( m2 Q0 U! N6 m: W9 S+ X2 N. E
return;
3 ]# F+ T2 F6 _. I}
& z# h" h* u* T: G3 ~ |
|