|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
9 |3 N9 }, g d u2 ^#include <Iphlpapi.h>
! t" m% H, w/ A4 c+ ^$ b#include <iostream># Q! @3 Y8 n$ K1 f) I
using namespace std;
& R& N, |7 M Q- F( @+ S+ d#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库1 p4 E8 J6 g0 H0 J! d" d
V' \$ E$ t( eint main(int argc, char* argv[])1 s$ s+ m8 Y1 o$ O& R, [
{
3 T1 ?7 a- U1 O //PIP_ADAPTER_INFO结构体指针存储本机网卡信息! R, ^9 a; x7 ^& B' p4 Y
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
% K1 `" L( W5 ^- P/ A4 Q //得到结构体大小,用于GetAdaptersInfo参数
' d- g* E7 L4 [, V( G/ e unsigned long stSize = sizeof(IP_ADAPTER_INFO);
, V/ |9 P9 D- B+ }$ O5 e$ O. @ //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量; v% O! {4 ~/ X
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
5 T8 O) ?, g" e. [ //记录网卡数量
7 P- g) `+ e/ X( X, l int neTCardNum = 0;2 m \+ b# F1 W1 P/ G0 Y
//记录每张网卡上的IP地址数量6 p4 x; J1 @! N/ [! u) A
int IPnumPerNetCard = 0;
- K& j5 ?( I5 b- H2 R# ^4 \2 _" v# H if (ERROR_BUFFER_OVERFLOW == nRel)
! c* G0 Z2 r" I0 \- k2 m( W* F {
' {6 x1 Z+ m* T0 _ //如果函数返回的是ERROR_BUFFER_OVERFLOW, N9 C9 W5 E% {6 B+ }; h* k4 K6 ^5 N
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小4 [* N" Q5 \' @- }
//这也是说明为什么stSize既是一个输入量也是一个输出量
+ ]" `* I: r4 W& c+ E //释放原来的内存空间6 Q; ^0 C, t0 ?% Q- _
delete pIpAdapterInfo;
# r0 H/ k, \9 C1 B9 ?$ ] //重新申请内存空间用来存储所有网卡信息
* }6 L- Q* _! o/ w" v. y pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
|* F1 d1 `0 U- q7 b3 c# f( }8 e5 R //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量8 c9 L9 l- G" t( h
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 7 I/ I) b; H O- s! ^7 ] s1 C
}0 T9 q/ q. ?; F# e A6 r1 a
if (ERROR_SUCCESS == nRel)
" o3 s4 k+ j7 o! [3 M {
, P. I6 m' N ^/ J2 o. X1 s //输出网卡信息
8 [% k+ ]0 g `' S3 n4 e //可能有多网卡,因此通过循环去判断
2 s1 x P- O: l4 i7 @! k1 p- E) g while (pIpAdapterInfo)) Q1 E. M$ L, E
{
8 T9 P: e/ w# I cout<<"网卡数量:"<<++netCardNum<<endl;
2 G- m; C# S' I- a' X cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
# r) H; W' t, i' z. m* s cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;5 \9 Q- ]9 ]2 l; j! E5 K
switch(pIpAdapterInfo->Type)* G" l- N4 N5 r* l6 ?8 K
{/ F( l! _' z9 \
case MIB_IF_TYPE_OTHER:% t9 T6 K0 `4 t8 a: b& T* v
cout<<"网卡类型:"<<"OTHER"<<endl;
$ V$ @9 t! p! S5 y, d break;4 u" A% p9 P7 O9 L v& e
case MIB_IF_TYPE_ETHERNET:4 A: o4 F) |) z# ^; V5 L
cout<<"网卡类型:"<<"ETHERNET"<<endl;! h1 E* D# W/ r& b% V& M
break;
9 p' ?* X9 q8 {) T, ~9 w" j- M( o, f case MIB_IF_TYPE_TOKENRING:
, G, { C) E* ?: e! g8 V cout<<"网卡类型:"<<"TOKENRING"<<endl;1 s A1 v! \5 I1 n. e$ a
break;+ |; A* {& M$ @: d" |8 k
case MIB_IF_TYPE_FDDI:' _& S. m+ W4 j" @) P
cout<<"网卡类型:"<<"FDDI"<<endl;/ a& z( m* E; j v
break;! Z O& ?6 e: A( w3 @. O9 n1 T9 P+ q4 X
case MIB_IF_TYPE_PPP:
% F# }+ M3 ]6 j2 c a6 Z* B printf("PP\n");
* }/ q7 x# @) F5 ^ cout<<"网卡类型:"<<"PPP"<<endl;0 | B/ \1 u' s) a
break;
% d& {/ O; z' J) J, A } case MIB_IF_TYPE_LOOPBACK:
8 l" V/ E4 S8 u. ]1 X1 }0 M cout<<"网卡类型:"<<"LOOPBACK"<<endl;
6 N% B; A7 M6 p8 Z break;* @8 ]8 I$ F. ]: }0 i
case MIB_IF_TYPE_SLIP:
( g6 m7 o5 @& f( @) ` cout<<"网卡类型:"<<"SLIP"<<endl;1 ]0 h! a% {4 K0 \ }7 O6 b; D
break;
' t% ~7 e& a5 P- m2 D! h% { default:
5 H3 [% X( @" U" r
" g& K# a. w8 p# l" H& Y break;
8 t% l% T' i g# {# B }
6 a& x {8 H& Z9 h6 ~; v* B cout<<"网卡MAC地址:";) _( ^# R6 `' ^# b
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)8 c0 S8 b. d$ d% n, _ q: K# q
if (i < pIpAdapterInfo->AddressLength-1)8 N1 u- x) K7 W' _! r: F( N' J
{
! z" @9 b& |% y$ a7 Q! n printf("%02X-", pIpAdapterInfo->Address);
2 r [+ o) h) Y& {+ M& x2 c8 Y }
/ Z: M; i' u# @1 X2 j% S; X else* ?* z7 g N2 u3 ^5 i( z6 [
{
% ?% g( H U- i printf("%02X\n", pIpAdapterInfo->Address);4 q+ s& u* L2 l+ G+ i8 l
}
" M3 c; t ?: X; e" B8 y& u cout<<"网卡IP地址如下:"<<endl;
1 S0 [: v% B( W' r1 K9 W //可能网卡有多IP,因此通过循环去判断
/ k3 v) z0 [ f2 V. Y% C IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);' P; v' q& R. M' x
do: k3 C0 ?2 T# `. P/ k/ S
{
( Y6 B) m$ Y5 o1 \8 q( `7 D* i cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;( D. V$ ~) }. K% a& X* A* l
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
3 ^, H9 c+ P& c cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
4 j7 A: l. {# ~# Y, m cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
1 P% P5 L& `; D3 H pIpAddrString=pIpAddrString->Next;7 F6 Y1 n. z# _- e! M
} while (pIpAddrString);6 p: u9 U1 B) v) B% \
pIpAdapterInfo = pIpAdapterInfo->Next;' J. F) D+ @2 |9 X
cout<<"--------------------------------------------------------------------"<<endl;/ q9 i7 v' n; \+ g- E
}- Z* \+ H3 U7 }
( `2 A2 m. T0 t$ c4 a# f }! J8 T( E3 q& o6 F% s
//释放内存空间
% e: i8 Z" ~% z7 s, u: M! R if (pIpAdapterInfo)
) \1 \. K* U' ?" ~# o5 F0 Q {
4 E2 ?4 `: t3 I4 y delete pIpAdapterInfo;5 l. K3 @1 P( T2 P9 [9 P, E
}
# M) k( i) q# A+ `) m) N
5 Q9 b; A% q- S2 K8 | return 0;
! ]. {/ z; P" p9 d! P' q}2 |: m7 I5 _7 Y* M: K
0 x, v+ ?9 ?$ l* Q) E
|
|