|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
. I3 d9 f6 q( n1 ]; p1 X" ^' M#include <Iphlpapi.h>
" t; ^8 s+ s4 p) _, w#include <iostream>
7 T% ?! e5 p8 x: P) a, Kusing namespace std;
6 S! K% G1 m- b#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库. c+ s8 {+ p3 G0 F
1 }& q- k8 t# V* C& S& G4 B, ^int main(int argc, char* argv[])
+ a' C$ w( D! U2 Y+ O% J{- [0 W9 Z$ c6 m4 H3 J4 o! B
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
& l& @ N( u8 |5 n/ O: j0 x PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
' y7 b6 ]* N8 R2 E5 \ //得到结构体大小,用于GetAdaptersInfo参数
3 Q# r+ W, R6 P unsigned long stSize = sizeof(IP_ADAPTER_INFO);" ?0 l/ n# ?' S7 @2 m/ T
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' o: O) A# h& i* \5 K5 p
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
# k$ G0 P% U, M7 U+ J4 h- \" l //记录网卡数量
3 S+ y( A& v- G, G+ d/ ] int neTCardNum = 0;2 \. M! o" ~" \
//记录每张网卡上的IP地址数量
& \8 @2 d' D0 K0 F I( F int IPnumPerNetCard = 0;
; o0 g( s/ |2 i1 f* f if (ERROR_BUFFER_OVERFLOW == nRel)4 W; f3 o! K2 s) Q) c3 X3 z) E: t
{
) X' p* W: {0 i/ o/ t2 [ //如果函数返回的是ERROR_BUFFER_OVERFLOW
6 a9 r7 H8 _* P) v. Z2 x( O //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
/ V5 l [8 B* _$ j! ]2 ?% F- | //这也是说明为什么stSize既是一个输入量也是一个输出量$ \# E" D9 Q) A; v4 q) v
//释放原来的内存空间% R+ e: c( k& i. P! C+ D8 S6 `
delete pIpAdapterInfo; N: j( l" M$ M
//重新申请内存空间用来存储所有网卡信息2 j: b3 X+ K' q5 ]6 U$ |
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];8 S) l2 d- c# C5 [$ A* Q, d5 v5 k
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量) g8 V3 L- @6 U" S$ A; v; S
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
8 } J( Z1 z# K. o% E }
" A7 F2 g$ P1 `& u+ y9 t% Y0 r if (ERROR_SUCCESS == nRel)
; S, g$ \9 [& k {
: o+ e7 o4 V/ r$ P/ o5 F5 j //输出网卡信息
h( E9 h- m8 p) q- W+ b C( Q //可能有多网卡,因此通过循环去判断; G9 z' C( t" V7 d3 j5 d& A
while (pIpAdapterInfo)
' |8 G5 O3 \; s! U0 x {
/ I0 N' S& i1 \ cout<<"网卡数量:"<<++netCardNum<<endl;; m T3 b' q+ E8 S: h
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;$ d/ }, S) j/ D6 B. ?% V9 o, g# n
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl; h, N+ l0 v# U3 z9 W
switch(pIpAdapterInfo->Type)
# T# W5 ]! _: N: } {
4 C' _! R5 B" q- o& M: R y case MIB_IF_TYPE_OTHER:% {5 q/ D' O: N3 Q0 d S
cout<<"网卡类型:"<<"OTHER"<<endl;9 ]5 ?$ Z6 C q( U
break;
8 Q- F5 o" M( b- O. @, w. t8 C* V% j case MIB_IF_TYPE_ETHERNET:
- E( ]: Q& t$ Z4 M6 y5 p cout<<"网卡类型:"<<"ETHERNET"<<endl;/ I( K: C4 ]; I, d! {
break;, k7 p. @( a/ R
case MIB_IF_TYPE_TOKENRING:
% [! e0 s! F8 {# l cout<<"网卡类型:"<<"TOKENRING"<<endl;8 Z% J% V: L' z
break;
5 m' m% U+ L; r2 q) e( X) e# k case MIB_IF_TYPE_FDDI:
2 g: ]2 W& w; |; [& b cout<<"网卡类型:"<<"FDDI"<<endl;+ T$ l/ t' ~. s% L: k
break;
$ W& H- i3 H' G1 S/ C6 d case MIB_IF_TYPE_PPP:5 L2 S- M3 \% H* j& w8 ^/ j- @! g
printf("PP\n");: b% O: M }/ J. k) ~
cout<<"网卡类型:"<<"PPP"<<endl;
# [& w! `& S$ Y# r1 m. [ break;
6 j ~& w3 j- W$ _0 V case MIB_IF_TYPE_LOOPBACK:
& F. _1 |1 g6 N$ l1 O# L \# b cout<<"网卡类型:"<<"LOOPBACK"<<endl;* x8 L& I, W. ]6 s( S
break;
9 p* ~ D( S" }6 { case MIB_IF_TYPE_SLIP:% H' h4 L2 U$ M2 F( r
cout<<"网卡类型:"<<"SLIP"<<endl;1 f, a9 N/ T, [1 W6 i1 R: f$ [# ]+ A
break;9 Q; K6 }9 w$ F2 z2 J$ E
default:
8 Z' o9 E, y4 S/ J2 _5 \" q/ f
/ l5 p" a5 g7 R6 @* o break;
- i( c$ A' V1 g" Q( a }/ }7 H0 n4 R4 a) J5 I& N% k
cout<<"网卡MAC地址:";) ^, `4 k9 u3 R- I
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
( j' t. t: l; d8 [4 t if (i < pIpAdapterInfo->AddressLength-1)
2 t) d9 `: j% z0 S1 X {# t; V4 j8 E2 S% U- l, t& B' i
printf("%02X-", pIpAdapterInfo->Address);
; M' [1 H1 d! J" ~ }
# p9 L& L: Q4 d* J else
8 C) a, s \7 P$ g. s. e( U0 j' | {$ ~$ f1 G" ?0 w% W/ y
printf("%02X\n", pIpAdapterInfo->Address);
3 I1 o2 Y2 C6 v% o) o }# M% _% \( `& L0 Z& T
cout<<"网卡IP地址如下:"<<endl;
. R- }% h* x' T //可能网卡有多IP,因此通过循环去判断
+ [2 t) Q$ \" @7 V9 f" ^ IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);3 F# S$ J5 L1 N4 w. O7 i
do
- S; ^8 ~, H. k9 H+ B8 U3 | {7 k" Q p4 u2 ^+ e$ m' W# z
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
. ^1 s1 _$ J& A* U% _ cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;# B8 n0 L, B+ m/ t
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;+ e( {. ?& H- |$ ^) C) n7 h
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
, h+ |' r/ D. L+ ?! H pIpAddrString=pIpAddrString->Next;
+ f8 w8 m& E: u, h% [9 q } while (pIpAddrString);" X4 ?3 q5 d* T- _) L' }
pIpAdapterInfo = pIpAdapterInfo->Next;$ X0 Q: m: G5 f4 t
cout<<"--------------------------------------------------------------------"<<endl;; l j! Q- ^5 F, o- S: r
}
" I% k2 L: n/ L2 \ 1 k, A+ W3 `' d7 k
}: L* g! {$ ]( w; N
//释放内存空间
4 R2 g4 `# C! G5 B$ {2 F if (pIpAdapterInfo)
. q. C) o4 r% i( ~( v# a( E {+ N, \) |8 ~7 ~0 u C. p
delete pIpAdapterInfo;9 c4 U: z u+ X7 R/ a v
}
+ x( u# @' T9 R) Y/ Q 8 N$ i/ A% d, T3 `
return 0;
# }4 X# \# H& j) W. J5 {& T+ d6 f}
9 G6 G1 L1 @: \1 @5 w
4 J( U$ W4 B2 h; h2 ` |
|