|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>6 g) A5 w2 u* @5 W/ z f7 K
#include <Iphlpapi.h> h3 t8 D9 Z8 E) P. T) {& J. m
#include <iostream>/ [/ C# Z6 m% l
using namespace std;
) C9 C& d; Q5 N# _* E. g#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
" G; M$ k; w Y6 N4 r) }6 R: S/ w* ^7 b( P# H" C
int main(int argc, char* argv[])
3 t' |4 Q; Z8 ~{* J) p4 K" m) a& W5 h2 M7 y0 n H" w
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息4 \. Y% E8 R6 F
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();& f+ O1 C4 i# Y# N: ~0 {
//得到结构体大小,用于GetAdaptersInfo参数
" n5 c+ u4 e) T- M# W' `; C unsigned long stSize = sizeof(IP_ADAPTER_INFO);( D1 l" z; y- ]: ~7 }+ S) n" z6 t
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
0 f" j3 u, v* k4 B3 L. i3 N int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 B+ L- } y. E4 @+ Y //记录网卡数量
" x0 d9 q5 X& m7 H int neTCardNum = 0;: K/ k+ ^1 _3 {. T9 U! L
//记录每张网卡上的IP地址数量
7 q; c2 O6 e: C2 u int IPnumPerNetCard = 0;
# ^* d* v0 o( X* q' P5 j8 ?$ w if (ERROR_BUFFER_OVERFLOW == nRel)+ Z0 r7 E* \, {7 _3 K h
{) J. @( i) @, K9 Q) ~
//如果函数返回的是ERROR_BUFFER_OVERFLOW" `: F! Z4 i9 {$ U5 ~8 W" d
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
) {8 Y, q' _; b' ^+ O6 n- O# ` //这也是说明为什么stSize既是一个输入量也是一个输出量& ?0 K% V) V, g0 E H* c6 Y; `
//释放原来的内存空间
8 k! e/ ?5 g: ~0 ~1 J delete pIpAdapterInfo;
% |* p. b3 J. T8 I2 O% a //重新申请内存空间用来存储所有网卡信息+ j8 L7 u c6 y; `& b* Y2 q
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
- S! t* b% o/ E' o7 @4 F d //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
9 y4 T% o" H6 J0 ~ {9 Z, {0 ] nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
# r6 W% C5 R( M4 o }
- ~) } [( B/ a if (ERROR_SUCCESS == nRel)
3 e: n* ^5 _ @3 c/ R {
& r, L) n' M: o Z2 I" [$ v //输出网卡信息9 }, V, P6 Z& B( J' U C) y
//可能有多网卡,因此通过循环去判断 S; c6 c* R, v3 z* Y& y
while (pIpAdapterInfo)# X0 c7 Y2 e R3 l0 `. G8 E; G
{8 O' @3 W0 U" ?% O% J% v5 I, Q
cout<<"网卡数量:"<<++netCardNum<<endl;
0 ^( R3 W8 U0 k, r cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;& Q9 k! p: A* T( h1 S, g
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;3 T) }& Q2 c: a9 A" w; u
switch(pIpAdapterInfo->Type)* N# y* v3 ^; J4 |
{7 h+ t2 }, h E6 |; R; ]
case MIB_IF_TYPE_OTHER:
N1 d/ e( e/ w/ s3 a! H cout<<"网卡类型:"<<"OTHER"<<endl;: T, t% A: R: ~1 T9 G7 |9 [
break;9 h8 O* ~9 r; L9 |7 x. i, m
case MIB_IF_TYPE_ETHERNET:7 k9 G, @5 |0 T1 d: o
cout<<"网卡类型:"<<"ETHERNET"<<endl;9 s# c* ~4 l( f- `- O
break;! a+ C) h& p5 J, m) C4 _2 s
case MIB_IF_TYPE_TOKENRING:
( c5 N8 |) L$ H, ]8 p0 K cout<<"网卡类型:"<<"TOKENRING"<<endl;( h: k" _) _) a0 k; |
break;7 |" Q r% J% g7 D6 J
case MIB_IF_TYPE_FDDI:
% r: H8 {3 F3 j) _7 J cout<<"网卡类型:"<<"FDDI"<<endl;1 u, D) ?2 Y# y) Z* D
break;. ~- j9 `% W5 }$ K
case MIB_IF_TYPE_PPP:
" r( K7 k, a# E9 f: b8 T& Q, D0 T+ h+ ? printf("PP\n");
$ |0 V- J) h! _- o cout<<"网卡类型:"<<"PPP"<<endl;
- \* B" Q$ q2 S0 C break;
7 n" f4 K( c3 V0 ^. S {( i0 d case MIB_IF_TYPE_LOOPBACK:" l1 R2 ^1 H/ @# a0 |! S
cout<<"网卡类型:"<<"LOOPBACK"<<endl;) L+ h3 W" }/ E, \1 \" p4 _" `
break;3 H8 Q- r1 L3 m8 P [. Q
case MIB_IF_TYPE_SLIP:
' ]) F! l. Q! Y" p cout<<"网卡类型:"<<"SLIP"<<endl;, Z* v8 F: z6 u, f+ H
break;- h8 v6 P- o* ^! R
default:
3 M3 G6 D! z' ^0 f: M; y) d ~, | v B) q9 a
break;
8 @- h2 \$ g2 N0 y- G& v! ] }" A- `) G) i' ]0 u
cout<<"网卡MAC地址:";
. J4 r4 n& [6 J4 J2 } for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)& L& E; ?* _4 t' h+ h( R- M- }
if (i < pIpAdapterInfo->AddressLength-1)
' }( H. `* V6 y; B: i; I" d {
0 g5 r8 E2 s# U9 F! G% [# K printf("%02X-", pIpAdapterInfo->Address);
; i( }, `+ g/ E+ ] }! C6 U6 U% I5 b, ~" Q
else6 }1 M- m' m( N [* J& J/ b
{
: G" f6 x# a' i9 B+ N |, b# o; F printf("%02X\n", pIpAdapterInfo->Address);3 t4 q! H- ? E
}
* ?9 T6 X" c' s6 ~1 z cout<<"网卡IP地址如下:"<<endl;
1 l# c6 O+ |/ S# m; g //可能网卡有多IP,因此通过循环去判断# k. @ h A$ I% z7 g7 V5 Y
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);* r& U2 O# O( ]- H" B
do
$ v% t# O0 E4 N {
* e3 Y. N' T. l cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
; x- A& E' d6 ?5 c' V: y cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
$ D# @1 q; O) ~+ e3 o" A cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;# {/ L- d- ^2 Q9 X0 ]
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
/ q+ V. j% r8 T, G. t: P. r3 Z pIpAddrString=pIpAddrString->Next;
0 l4 {8 m1 T1 ~ }8 q3 n& _2 P" l } while (pIpAddrString);" B7 w- H N/ a& a; O. [
pIpAdapterInfo = pIpAdapterInfo->Next;5 O$ D9 O6 ^; T7 t1 \: w' Z
cout<<"--------------------------------------------------------------------"<<endl;
1 q' | W" J/ d% X2 `0 p1 c { }0 K& c2 X. p: X' ^ D% W
, l! ]- W8 d+ p5 p6 [: p# o }
; {6 h) v. q- X) e //释放内存空间$ ]- x/ G5 p# g/ l
if (pIpAdapterInfo)
7 \% I: ]* N. M! c {, T1 } l" c( }
delete pIpAdapterInfo;
+ K5 @# a! ]8 Z. p6 r }
* X) _' d V/ ]: h4 @ 3 F9 [1 N) `% H) S: S& N
return 0;% Z/ @7 ^3 b+ I. L7 P0 x
}
/ ^2 n% d; |3 d+ R
, H. r, {2 r3 c4 I' q& F5 ?+ F |
|