|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
% S' M# e3 D1 g1 K6 g#include <Iphlpapi.h>- R2 Y6 O8 w! |1 }& Q, K: g* L* I
#include <iostream>
3 S$ G6 l% e9 V7 j! @; _using namespace std;, u, P y$ w3 f% q" [
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库, g& ^, e: S! L5 y' D
. T# e! W$ n4 [- ]) B, k
int main(int argc, char* argv[])
4 M. _5 L4 z- N) A{% w5 ^) ^ K6 e$ Y: U0 P4 N
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
: x3 x$ k. n+ d) n9 \8 K PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
; v: D: @6 u: S7 ^- m //得到结构体大小,用于GetAdaptersInfo参数- H* \; B1 C9 v" C) j, c! w+ d
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
+ N# b4 }% p) U- Y# R6 s" H8 O% M //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
3 {1 F H- e* I int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);' u- F) N: V8 i, b
//记录网卡数量 v6 H5 v% n6 `" _( k( J) d
int neTCardNum = 0;
/ I2 j0 v" Z5 y6 a+ | //记录每张网卡上的IP地址数量
: @8 h# }3 @$ o7 I8 C3 d& W int IPnumPerNetCard = 0;; J& c q! Q6 [5 ^! p t/ y
if (ERROR_BUFFER_OVERFLOW == nRel)' ^( B T8 M5 C
{
1 i( v9 {) M# n3 m' e, Q4 I //如果函数返回的是ERROR_BUFFER_OVERFLOW
5 f5 R: O7 [: x' }8 T //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
1 L9 K9 b( `$ B" b //这也是说明为什么stSize既是一个输入量也是一个输出量! w. Z( K3 T7 Z! i
//释放原来的内存空间0 T/ L& i7 v. j) V' r5 S, ^& \
delete pIpAdapterInfo;4 D4 | M; y4 \
//重新申请内存空间用来存储所有网卡信息' E2 A" |" {8 |- F; \& D
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
. f3 {: Y. H. A1 t7 u //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
) a" q4 A6 X" A8 D7 F. ? nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); * q7 x- X; z. X' ~7 n4 j$ G1 k' c1 ]
}" ^. l6 D4 z. P' q" Z
if (ERROR_SUCCESS == nRel)' X e, @7 g$ a( {
{
% y( n2 j+ u: e a& Z //输出网卡信息
, T! \0 g) }2 K //可能有多网卡,因此通过循环去判断% J. s3 n4 i ?( j* I
while (pIpAdapterInfo)
+ L- K2 s0 G& f6 R+ c {
" ^) I/ q' k# v$ j cout<<"网卡数量:"<<++netCardNum<<endl;
, M! H% U4 X6 b0 ~/ H cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;, _: t. H0 Q2 l3 F
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;$ U/ U$ x( k6 t2 X, Z0 ]
switch(pIpAdapterInfo->Type)9 k0 B/ ?, o" X$ Y5 D
{
& e2 Z8 J- g5 B7 Y case MIB_IF_TYPE_OTHER:
' i# f0 ]! T+ l& Y7 H$ ~3 H* E [# G! t cout<<"网卡类型:"<<"OTHER"<<endl;
& J; y4 f6 m7 y1 Y- H/ \7 a break;9 T" \% s4 I6 Q
case MIB_IF_TYPE_ETHERNET:7 r' F/ m# M, q* J- F: ]" u# c
cout<<"网卡类型:"<<"ETHERNET"<<endl;3 z5 R) h& ?. ?2 y& w
break;; R* z3 F/ s G7 J- H* ]
case MIB_IF_TYPE_TOKENRING:
( M6 E% t- x7 Y# b cout<<"网卡类型:"<<"TOKENRING"<<endl;
I5 q$ {0 m, r' Z# { break;
- S4 v2 R( g( p& u" ^3 \! b case MIB_IF_TYPE_FDDI:8 g3 P" M" K, g# m3 Q4 h
cout<<"网卡类型:"<<"FDDI"<<endl;
1 P5 @& T3 \" H break;' ]/ [2 w; L/ E. |# ?( Y
case MIB_IF_TYPE_PPP:; Q8 R$ c& X! x* T: E) d0 @
printf("PP\n");
% Z6 _' E9 v! ]: o# M cout<<"网卡类型:"<<"PPP"<<endl;4 R7 j D* n$ ^" z0 U0 V
break;
0 t% q! @) g. M case MIB_IF_TYPE_LOOPBACK:
2 @' J1 l1 X/ k' R3 ?/ n cout<<"网卡类型:"<<"LOOPBACK"<<endl;
. `* d3 y2 ~, m ?0 j* G break;' s3 X( d" t* _/ U
case MIB_IF_TYPE_SLIP:
0 R: A, Y- @# I7 F cout<<"网卡类型:"<<"SLIP"<<endl;1 l8 N& H$ T' Y8 p
break;; f6 d0 V4 f; Y. v3 Y, n
default:
4 W/ A0 v! d& [+ d' y5 _2 R) W
$ T9 Q8 c" Q2 G4 `( V break;: X. O: V& {+ S! O( _" M: R0 A- n
}
+ q2 B' ~4 c8 W* u$ _* u cout<<"网卡MAC地址:";
2 x0 w/ [) l3 o" G1 u% t for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
" w: T9 A3 j' a+ c if (i < pIpAdapterInfo->AddressLength-1)
. P& \9 ]5 B/ t {. P: r9 T2 @5 n( ]9 i
printf("%02X-", pIpAdapterInfo->Address);
% Q& a8 V; O; }% x+ G/ t! O }/ x9 }4 T" {+ y, {1 M7 o
else
" V/ c, d( A' w" W {
4 a% }, V1 m. Y% q) t: V printf("%02X\n", pIpAdapterInfo->Address);, H* @( _4 R0 {! `
}
4 Z3 y# ?4 {1 p: E7 F. K cout<<"网卡IP地址如下:"<<endl;
4 A+ r$ N8 v4 O //可能网卡有多IP,因此通过循环去判断
" e8 s' i! y7 D# |" b2 [+ J IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);7 B3 p3 ?3 Y" a1 U) O0 w* _
do0 t. C2 q: g; b/ }
{6 G: q1 J) N/ D8 }2 V* K
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
* B4 [2 z0 Y/ E3 p cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;- R" G$ K5 X/ x- k* }# Q0 c
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
6 q7 u" o8 f3 H7 [1 f6 } cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;- m* n( a) ~6 Z! J, Q
pIpAddrString=pIpAddrString->Next;$ r: S+ X* p! ~" ^( O0 f
} while (pIpAddrString);! Z4 }4 J, @3 X
pIpAdapterInfo = pIpAdapterInfo->Next;3 H. @" T& G) [; E& U ~* k" K
cout<<"--------------------------------------------------------------------"<<endl;% X: ]1 K4 E+ K- x5 z
}9 l" Q; ^& }/ M# x5 ?( q& \
* J; k& C$ e: Y+ s4 `: P
}% a" ?6 l' Z! [* E9 B- R
//释放内存空间; d; G5 n: y3 l" Q7 ~4 X
if (pIpAdapterInfo)
# P, M9 M. X8 B6 x7 P* t {7 H3 H7 k0 @6 E) @6 U
delete pIpAdapterInfo;7 p2 ~) T- G5 I" v
}
& Y; [ z' d" i" j/ h
; @# a' e- x1 ]! S: A; I return 0;
5 I. V( X+ w# I4 V) V* G}
0 N {1 O J$ [" a5 Q/ \ p+ }% R: b. n
|
|