|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
- G& F% a4 Y+ A#include <Iphlpapi.h>
! X: {, W) g$ g1 q$ ]#include <iostream>; L: z8 v& X3 T4 r8 x
using namespace std;
* j, A8 \% j6 ~' i( m#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
^& c( C: W- l A% t$ O) \! D3 v# x! c3 n1 E8 m- `
int main(int argc, char* argv[])5 v2 r9 x0 n& `1 X5 K& {% u- A6 Y! h
{4 y3 v4 n0 W1 f; d; B# L2 p
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
: F! `- u5 {$ H; d& R9 s PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
1 _6 I, a" B0 D9 G //得到结构体大小,用于GetAdaptersInfo参数
& V0 T) }9 O" L- d: s( b# W unsigned long stSize = sizeof(IP_ADAPTER_INFO);
, E; \8 o# r( H //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量7 t# G0 K/ }5 f% Y6 m' u' K
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);$ R8 x# _; _; ?' C3 X+ z
//记录网卡数量2 n! Z; n n1 Y. M; U: ?1 M
int neTCardNum = 0;
2 _6 ]! O- R9 F& ?$ p' {( \ //记录每张网卡上的IP地址数量
% E% ?' p' L! k; [: `% S2 R int IPnumPerNetCard = 0;
) B# R* r. v: p7 x. I. z' o if (ERROR_BUFFER_OVERFLOW == nRel)$ X ]5 i' J8 ]. |- N1 {% ]/ ~
{7 T: V9 V. p7 O6 W+ c( ?8 ^
//如果函数返回的是ERROR_BUFFER_OVERFLOW
2 E6 ~5 U7 i1 s5 U0 R$ e5 s //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小7 H# e1 m7 N. ^4 N9 a, |/ _& X/ z
//这也是说明为什么stSize既是一个输入量也是一个输出量& b1 w; i7 m8 ^
//释放原来的内存空间
$ T7 K% k- z) W. P delete pIpAdapterInfo;& k. p4 x7 ?' X% j3 @1 J4 D
//重新申请内存空间用来存储所有网卡信息: ? d# z4 i3 i" E. O" Z
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];4 F- m, }' A) }1 [6 T9 {8 O4 G8 l5 n
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
' J! [& \- R5 t6 C* E nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 3 o [5 H4 j/ l" F) ]
}9 u2 z) Y& V, }" g N
if (ERROR_SUCCESS == nRel)+ A2 n" U4 k; }! v, I% V8 {
{
8 l2 c" o. v2 g3 t" B% V //输出网卡信息
( W8 Q& E5 Q; A, ?# j! k //可能有多网卡,因此通过循环去判断
9 K# p( E7 Y9 ?% g4 n. a- s while (pIpAdapterInfo)
5 p$ b: s- ?1 D! k | {
) o$ n: O# q7 S& q0 {% I/ L, ^' l% D/ w% ? cout<<"网卡数量:"<<++netCardNum<<endl;
5 }8 h: b3 `9 J# E* F# z! @0 S cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
( ]1 A7 F! \8 X R& a cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
& E/ K/ _ ?; t1 v/ E switch(pIpAdapterInfo->Type). `6 ~% [ c: G' _
{7 {% j3 \/ v/ t g6 Q1 m3 q
case MIB_IF_TYPE_OTHER:
9 W8 u5 Z7 a+ z- s cout<<"网卡类型:"<<"OTHER"<<endl;
e* x5 U7 v/ L! t5 ?/ e4 \ break;
$ z3 S9 c( x: b; `6 ^$ o case MIB_IF_TYPE_ETHERNET:
. H0 ^ l7 E4 g, E cout<<"网卡类型:"<<"ETHERNET"<<endl;9 F8 s: A' V1 Q [ L: I; q
break;. @! I/ ~$ i6 Q9 T
case MIB_IF_TYPE_TOKENRING:0 E. N8 o3 f% Z5 ~8 c
cout<<"网卡类型:"<<"TOKENRING"<<endl;
% l9 j9 t/ U' M0 s4 m/ d break;6 u" E# z! g! j* d8 w
case MIB_IF_TYPE_FDDI:5 g. ~ E8 ?! q9 C( c6 I
cout<<"网卡类型:"<<"FDDI"<<endl;9 t7 w, F& k' n: d% `. c. L! K
break;
( h/ H/ G. \) x$ C6 @9 B case MIB_IF_TYPE_PPP:
: b6 a* `* Y9 p* e: w printf("PP\n");( h( z- I, y, D( f; M( {
cout<<"网卡类型:"<<"PPP"<<endl;
2 [! I- s9 s- Q0 W: x break;
! `4 ]$ Q7 T9 V2 V; b case MIB_IF_TYPE_LOOPBACK:6 M3 m3 ^, C$ W9 ? Z7 Q
cout<<"网卡类型:"<<"LOOPBACK"<<endl;: S9 b0 r3 C3 y7 L+ z0 q
break;# y4 O a8 T( i& w
case MIB_IF_TYPE_SLIP:
1 }3 e7 |- r9 a& J( r2 m7 ?1 F9 i8 S cout<<"网卡类型:"<<"SLIP"<<endl;7 q2 T0 h2 L4 U& f
break;* K5 z O; n+ a% n. c
default:+ A" G% k* H' p* U% b
3 a: D+ e5 w4 p5 m
break;
7 n3 v( |5 K: h# F: i }3 E7 H; k; K: q& L
cout<<"网卡MAC地址:";
; h, |. N0 w2 n: |! P for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
, k* F+ b6 }: {# K( M if (i < pIpAdapterInfo->AddressLength-1)+ G0 c- r. ~/ Y# X: A; k
{
$ H( ^0 I& p% O9 p9 r3 |/ z printf("%02X-", pIpAdapterInfo->Address);0 |, W$ g* \. k9 E3 @( O& j
}
8 v2 q" u' e' a) D0 }4 L- W else
- `7 n5 k6 O+ A# i n {" O; J3 s1 {/ e8 b
printf("%02X\n", pIpAdapterInfo->Address);
) U& Q* p7 z2 R# U }/ E4 g- Z" D& o# M/ ~8 k
cout<<"网卡IP地址如下:"<<endl;. s6 R, r2 {! I+ W J, }
//可能网卡有多IP,因此通过循环去判断2 f9 K2 @' b4 ?
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);2 e2 \ O, l& F, K4 Z, z2 A
do3 |# {. E4 @8 ]
{1 i# B" A* P8 F" @0 k
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;3 _5 Q) w& ^- @5 q8 E1 A
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
4 U2 X% d2 \7 J* H cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;+ s2 H, q5 ?! J% W9 b
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;0 `, o" Q8 x' V* k, d! _. \
pIpAddrString=pIpAddrString->Next;
4 V, g( X( a6 ]# ~" J6 G: P7 w. ]& R } while (pIpAddrString);
$ S T* { E2 F( T2 {: G8 R! c pIpAdapterInfo = pIpAdapterInfo->Next;$ t6 N& P5 X2 l) I4 L0 A
cout<<"--------------------------------------------------------------------"<<endl;* V- t2 H; z& b) M& k' V1 g
}$ P* j- K4 t0 l: j
3 v6 |& y/ e, @( o& ? }
) T& p6 I" |, \! Y //释放内存空间$ [4 V: [3 h, c# p
if (pIpAdapterInfo)) [7 }+ [4 f3 b* Z3 i [3 P0 A) t
{" t6 U" _4 w, w3 @9 ~" s' F
delete pIpAdapterInfo;
' H7 u1 Q, |7 v& I( }- j7 F" v }" ]) n% _1 m2 }8 [0 [
1 {+ [! ?) a) y8 V1 h return 0;7 i3 R0 C: S, A
}
6 W" X; K! x+ S, _. f9 p0 E" _3 j3 E, K4 r
|
|