|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>% D/ {' R; I) d1 u- z1 p' W8 q' T
#include <Iphlpapi.h>
' w- o. b5 ?# J' p) y H# I#include <iostream>( u8 z2 S5 v3 ~# _1 l! b6 m
using namespace std;
1 D: B3 l* q- P( B#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库* _( Y" t: n0 o( s
: O2 y7 K( D/ x9 \2 vint main(int argc, char* argv[])
6 E; W" N! N4 J0 n- K{
& I; Q- y( s9 X //PIP_ADAPTER_INFO结构体指针存储本机网卡信息 S. L2 o7 i- F0 |, \
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();) t6 ]2 U% v7 r! B6 G4 b, O, G7 V
//得到结构体大小,用于GetAdaptersInfo参数7 A$ j* s3 d T" m) E
unsigned long stSize = sizeof(IP_ADAPTER_INFO);2 T& e. r6 V3 d7 y
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量0 k2 a( w w: M
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
6 m& b2 U! u" k# P. `4 o/ a //记录网卡数量
8 |$ ]: `$ z2 E9 {, S& |% U0 V int neTCardNum = 0;
, O( [4 k" L3 ^ //记录每张网卡上的IP地址数量/ i5 Y2 T" w' M0 j, X
int IPnumPerNetCard = 0;
8 u& R7 A& y7 f3 d* r3 i if (ERROR_BUFFER_OVERFLOW == nRel)" X3 l! | ]0 @ C/ `
{
4 y7 o2 w. V/ h //如果函数返回的是ERROR_BUFFER_OVERFLOW
7 P7 o4 u( u$ b$ J7 B3 i; D6 { //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
/ ]2 I! z0 R( F |- j# j //这也是说明为什么stSize既是一个输入量也是一个输出量/ G2 A# V: f3 G& _2 G" Y5 c
//释放原来的内存空间
9 m0 S# d0 E. x; J. Z. O delete pIpAdapterInfo;% ?8 ~! x4 l/ S% h9 r- d( M5 R* r
//重新申请内存空间用来存储所有网卡信息& u3 z$ S' r9 b2 y: g
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];! P9 d5 K6 n* J6 @) f1 l/ `
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量, a1 H6 o; A8 S0 |2 C4 E; |- H
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
6 ?3 S" ~- E& v' U }, i$ p4 ~2 n( x2 ~# Y
if (ERROR_SUCCESS == nRel)' Z% t0 p$ t, o6 }' w& }1 s6 c
{( L7 M" q& ^* j3 n2 {% g S* D
//输出网卡信息8 P% _0 D3 x- X( r6 [/ |
//可能有多网卡,因此通过循环去判断
( p4 Y. Q5 E d# [% U while (pIpAdapterInfo). `: @- P$ S: h: i
{) M1 ~% Z: Q% h
cout<<"网卡数量:"<<++netCardNum<<endl;
0 v# e0 _. _: y cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;( e0 z- _8 K* n$ f
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
" I) w2 v% T4 M1 W4 G switch(pIpAdapterInfo->Type)
% e/ h6 J4 l/ I! o% c$ N+ H; Z' o {! u+ h, o9 ]. H* a2 p" y9 z; ?
case MIB_IF_TYPE_OTHER:8 h' I$ ~0 ?# @ P
cout<<"网卡类型:"<<"OTHER"<<endl;
) {% _. @, M& e+ E5 u7 c break;
! i3 x* z0 V5 t: W! O case MIB_IF_TYPE_ETHERNET:: I3 e+ G, \; r a, R$ I
cout<<"网卡类型:"<<"ETHERNET"<<endl;
% p v( u$ ~" }, _3 Z) X break;6 G; t6 |2 U( v9 I) I" \
case MIB_IF_TYPE_TOKENRING:7 h/ O3 S) S( R+ Y
cout<<"网卡类型:"<<"TOKENRING"<<endl;" H: Z$ j$ B1 V& _4 H
break;
, N% T% G% e1 ^# }9 T case MIB_IF_TYPE_FDDI:
( f" w2 O8 s+ { cout<<"网卡类型:"<<"FDDI"<<endl;
: l' U+ R$ T; n# g3 W+ m break;
: `% h. o( J3 H6 O case MIB_IF_TYPE_PPP:
% u. J/ ?. [( r6 {1 h7 g printf("PP\n");
$ s9 y% Z( g: X) W+ K6 ?4 g' X# s cout<<"网卡类型:"<<"PPP"<<endl;6 A% l) x7 N& w9 Q( }3 f! r, o1 c
break;$ L9 { V( e( _& z+ V9 S9 i1 ]
case MIB_IF_TYPE_LOOPBACK:
" H4 [) Q9 Y5 f* N' R* Q cout<<"网卡类型:"<<"LOOPBACK"<<endl; p- t2 K8 C, i ]- R. \
break;
4 `* A; g* t4 L- c case MIB_IF_TYPE_SLIP:1 ~2 a" P" R3 p7 m5 x; j
cout<<"网卡类型:"<<"SLIP"<<endl;8 _( I, j& F& ^
break;$ x1 S6 U2 @. x6 q/ |0 d
default:
* k9 e7 {. K1 j
. A/ {3 V& N, J- ~ break;
# A _" L+ I# V# O. E/ M4 Q% d% H }
! @4 v1 M% y! N& r; V, t cout<<"网卡MAC地址:";
+ ?! N$ [- \ \4 Z* `5 R for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
; U4 t; |/ |( W7 o Y+ k if (i < pIpAdapterInfo->AddressLength-1)
! `* k% s) Y. h/ q0 K3 ~) g- n {
0 f5 R$ }$ W0 i& R4 Y$ S6 _$ d: v printf("%02X-", pIpAdapterInfo->Address);: ^( y* T* t, J, Q% c/ i3 q1 B
}% b% G+ [! e* {8 I) E( v
else8 A, h# P6 J" j3 H: v7 N
{$ t2 n2 G% k! u( a' s$ l1 H; v
printf("%02X\n", pIpAdapterInfo->Address);
' }* v w, S" _ }
6 o# W. F- b( p cout<<"网卡IP地址如下:"<<endl;
- c* c5 |2 T+ {% w8 R //可能网卡有多IP,因此通过循环去判断( |; S% P2 L- [6 i T' G8 p# M) s& P
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
y4 I( H! v% n+ d w$ s+ u& m do" M ^2 m. B" W; z! P3 |1 z+ D
{- F; _, S, G6 G$ Q1 W8 [5 n% }4 v
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;7 P1 B3 \2 L& U4 m
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
8 J% g+ i1 n2 p+ W& X5 h$ S cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
5 t7 |0 _3 n7 L; z4 x# G cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;9 M5 l: R- ~1 B
pIpAddrString=pIpAddrString->Next;
" W5 ^# _+ }$ p" G4 x } while (pIpAddrString);
: a9 T9 O; p0 I" |5 C pIpAdapterInfo = pIpAdapterInfo->Next;7 k; _. s& U9 ?. G
cout<<"--------------------------------------------------------------------"<<endl;
4 ~- Q! t8 r$ p* X6 l- ? }
4 O( r0 B' R5 S g1 U) A( y % h3 O5 ~. h5 w9 ^ f
}1 \, C; T% D, \3 Y) c
//释放内存空间: x6 i6 l( }' f& u6 Q t/ x( O
if (pIpAdapterInfo)
( Q4 m8 i6 @6 @2 a5 m y {
$ m `5 z" `. |% b6 \% S delete pIpAdapterInfo;; o4 K/ Y; o4 S/ s2 B: r
}
+ ~( u0 B$ V" u ; e: a) {; g, x3 Q9 S5 D. y) v
return 0;- t( C+ z& |9 O+ N9 q7 c
}1 ], j' I6 W+ y' T3 K3 L. F. C8 f/ t
( c- j$ F, O7 i9 |9 p# R |
|