|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
1 l5 ] v1 `9 F+ s: c% C: `- t3 T8 M#include <Iphlpapi.h>- c3 ]& u! `5 x) A; S/ B5 e
#include <iostream>
* u+ v+ w# `/ x' _using namespace std;
0 c4 S5 j* `! `1 p#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库0 W! c# w3 `7 W: l% Y$ k, D& y, ^
& Z+ W, ^$ S8 N4 f9 |9 \
int main(int argc, char* argv[]): |" s& u+ S \
{
: m) ^, {7 I) U+ u9 U1 p3 Y" O //PIP_ADAPTER_INFO结构体指针存储本机网卡信息) k- w; X, L+ G; t6 J; o
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();- c5 j3 D2 x3 q/ m8 N7 s
//得到结构体大小,用于GetAdaptersInfo参数
. i! Y G$ E* c unsigned long stSize = sizeof(IP_ADAPTER_INFO);
, `5 z5 H0 @9 _2 G, W) L6 `$ s //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
0 r- d7 `- X; j0 V0 O3 _' D int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);) s* X% i$ L, N$ U
//记录网卡数量
5 o3 G6 J5 N4 l6 G int neTCardNum = 0;$ z2 U D$ L/ P3 R
//记录每张网卡上的IP地址数量
9 ^( t% N% q) v5 h% ?( U int IPnumPerNetCard = 0;
?" \& _% p5 Z6 J, ] K if (ERROR_BUFFER_OVERFLOW == nRel)! O! x# y; [- a5 u% ]
{1 w8 S& a0 j% U6 u J2 t6 t" ]
//如果函数返回的是ERROR_BUFFER_OVERFLOW& v% X0 w E6 c+ C L4 @) w
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
( V3 m5 g- \7 o0 D7 n8 a% s/ R //这也是说明为什么stSize既是一个输入量也是一个输出量
+ n( @0 i6 @7 M( Y; K //释放原来的内存空间
$ U1 w& E1 u. A delete pIpAdapterInfo;6 H3 B" P( ?! X6 w, X4 O V
//重新申请内存空间用来存储所有网卡信息- a, K! ~" G/ R/ \: a
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
3 |4 L/ [1 \, Z: k, o+ L% g* m //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
* h S4 q, r% P2 n! I. s5 j) z nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
2 @% @6 q- m2 q8 ^( T( a }0 l/ h' X7 d4 l( X( B7 r
if (ERROR_SUCCESS == nRel)0 o3 g+ D+ f+ n
{
- N. Y5 i% W9 x% } //输出网卡信息/ b( m, m. O' V; _
//可能有多网卡,因此通过循环去判断
% [% C) @4 D% V$ V6 q while (pIpAdapterInfo)
& b$ i* s4 V. n- z {( W% B( C! b6 T4 K' o |7 K+ |
cout<<"网卡数量:"<<++netCardNum<<endl;! f. D) O5 l! {1 y! O- ]" ?
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
, e1 G# N0 d- X6 O/ D, s3 f6 B cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;4 B) P. M/ K& h$ \! R1 a; E
switch(pIpAdapterInfo->Type)5 k$ Z2 C' I5 h/ U( y
{+ z% J3 C7 |8 R+ O3 q
case MIB_IF_TYPE_OTHER:! p) J7 E+ i! q4 o4 d$ r
cout<<"网卡类型:"<<"OTHER"<<endl;
H, V% o! r8 l+ Q9 [ break;( y, S* g5 w L7 ?
case MIB_IF_TYPE_ETHERNET:* s. B5 n- J2 h, s) }; g, n7 E
cout<<"网卡类型:"<<"ETHERNET"<<endl;6 V5 N# T2 P- Y3 _
break;6 J- v- N# | @: K) G/ E2 Y9 I
case MIB_IF_TYPE_TOKENRING:
* Q& n7 v0 n8 A0 ?# N cout<<"网卡类型:"<<"TOKENRING"<<endl;4 {9 [; a* b' _4 b0 \% |
break;
- A- y& ?( q3 r, V. X! a/ g case MIB_IF_TYPE_FDDI:
7 V& K8 _7 O2 l& b. s& y. | cout<<"网卡类型:"<<"FDDI"<<endl;
! r5 r! l9 S; w# C break;! \7 ]5 o3 `* q- Z! q
case MIB_IF_TYPE_PPP:
0 ~( C6 y1 {) \9 S/ [4 P& ~ printf("PP\n");/ v6 e0 b$ e. W2 o1 {9 n
cout<<"网卡类型:"<<"PPP"<<endl;
6 y! z7 U1 |' R4 W+ t break;
* X6 K1 K1 M/ r0 V+ u case MIB_IF_TYPE_LOOPBACK:" E3 I" _( |0 S0 H
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
3 n: w0 j6 @: V1 M9 }" y# D break;
5 P5 I! T' c( ?* K, U case MIB_IF_TYPE_SLIP:9 W( A3 W# G. U9 J- i6 y
cout<<"网卡类型:"<<"SLIP"<<endl;
4 }" ^* \2 I U, k5 Y break;
7 y+ @. n9 H' e default:$ w, j' N0 H0 p# k6 }
- ^. Y7 M C4 o6 l9 Q2 T break;5 s6 R# ^+ r2 J3 n
}
9 d f% z/ o% r# y3 |2 |' Z cout<<"网卡MAC地址:";( p7 n5 D8 F! Z0 O
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
% j. e( r: o n1 G$ Q if (i < pIpAdapterInfo->AddressLength-1)
- [/ H7 B; d0 Z0 H' g1 w# t: m- k8 H {* l( M) ^# e7 @' q
printf("%02X-", pIpAdapterInfo->Address);- G8 a T* D/ T4 }4 m5 ^
}1 h, S$ [* c t. y
else. b5 @: X O- l
{
% `: O3 D2 g2 x% d) d printf("%02X\n", pIpAdapterInfo->Address);
8 z" Z' z6 n, H$ N }
3 [! s/ Y/ }- |/ X& |- L cout<<"网卡IP地址如下:"<<endl;
' k- @8 S/ V4 V //可能网卡有多IP,因此通过循环去判断. \2 m; b2 T' O) L8 b1 R6 q
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);5 c1 t0 Y4 @4 c
do
8 a* a5 T' X6 d) I$ F, Y( n! h6 v {
0 E" y" b, m& }% c+ }3 z. S cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;; r0 N9 x$ H+ u% @7 Y, v
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
0 ]; P. B8 S3 a$ h' Y. Q( E6 Y cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;! c( d! O2 V. p1 p( I4 }
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;) j( f4 n% m. F) Z5 j- M/ L/ |
pIpAddrString=pIpAddrString->Next;
: U$ T% L; ?5 N h* K( u( `, ]: ] } while (pIpAddrString);
1 F' d/ H1 D! R; k! v; w! c) G6 A) g pIpAdapterInfo = pIpAdapterInfo->Next;
4 _% l4 Q) A6 U. s5 f$ w; x! Y cout<<"--------------------------------------------------------------------"<<endl;
! O' _0 \; X5 T0 W, C }
- C9 T& x3 L% H) T
, P) f+ X3 [$ ^. M0 @ }% l0 g2 b) w$ D* [
//释放内存空间. }& s0 J) d# Q/ P: d H# h5 r
if (pIpAdapterInfo)$ X, z7 |0 }: v( T$ v# A/ r
{
3 C5 P- i6 l7 q7 p# b6 X( w' U8 _$ { delete pIpAdapterInfo;0 q9 F& z" { M$ S( ]
}, i1 t" K1 M3 j+ q- {/ D% {
2 L3 k8 I6 `5 B# t8 t
return 0;
' m/ F. d- V0 i: S) G: Y I0 F}
5 X2 ~, M$ _& \3 u: j2 G7 y2 x, q5 k$ R) M
|
|