|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
, N! H/ ]3 t {5 W#include <Iphlpapi.h>
0 @; N7 _0 o( e5 ?4 t R#include <iostream>8 |+ X7 N4 d3 E* P5 n. q
using namespace std;" t5 f9 Q8 @$ x0 ~$ ~
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库- B) I" Q9 ?/ t1 k+ _1 |6 B
1 _& e) i! ^( e4 {4 ~int main(int argc, char* argv[])
0 z, W4 |+ u& h! j, k7 W |- A! o; h{6 D+ I4 O9 L7 W+ ]" z% p6 p8 h
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
* k7 w8 j: K m- Y% L# x PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
2 q$ h/ k1 O' |$ F9 B- r. j$ o L //得到结构体大小,用于GetAdaptersInfo参数. x- J5 F, I* U D( z4 |
unsigned long stSize = sizeof(IP_ADAPTER_INFO);" m- ~0 |( p; o5 S) i
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量. K, V" G* b: i3 W% W& B
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
1 l% A, i$ G x8 D //记录网卡数量
1 X& ?$ _" l& v6 }) P3 r int neTCardNum = 0;* a8 U& X# }% S
//记录每张网卡上的IP地址数量8 Q$ d7 |" B0 P4 r! u* j. i
int IPnumPerNetCard = 0;
+ I- J( |0 i1 t7 j if (ERROR_BUFFER_OVERFLOW == nRel)
! M# h$ {. d7 M% v' G4 G {6 T# B7 _# r( p$ y2 y
//如果函数返回的是ERROR_BUFFER_OVERFLOW
, R w) |7 [+ v% V //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小1 ]' p9 z4 B* ^' A: f
//这也是说明为什么stSize既是一个输入量也是一个输出量
4 G7 ~; v6 L" i //释放原来的内存空间4 R3 l& x/ v" ^& h: X. X
delete pIpAdapterInfo;
1 a! r/ e* m, O k% y //重新申请内存空间用来存储所有网卡信息
/ m6 t% c [& ~3 ~7 m pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];1 F$ j/ C3 L( J% E
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
! U, `" b6 e: y" v nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 6 A* r7 p# n& K( r
}1 |' f: M0 U2 u/ v
if (ERROR_SUCCESS == nRel)
. o4 d& k4 Q8 g( [ {( e {% d( Y5 L. V. @6 B
//输出网卡信息
4 M$ ~& f- a: [% Q( O( Y //可能有多网卡,因此通过循环去判断
" [# l) g# w9 ?/ N while (pIpAdapterInfo)
9 Q) u& B9 L: R8 s8 N% d. a. X/ t {
/ g$ T7 P0 ?7 M0 e cout<<"网卡数量:"<<++netCardNum<<endl;" _' b' q5 N) f+ v/ \ k
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
; p: w; u! q! Y; E) L3 x, W4 v, l cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
5 U- t3 {' l* A0 L+ e* u/ \/ K/ y switch(pIpAdapterInfo->Type)
" c* b) Z6 r( H; d O( P0 I {
Z5 P* b; x4 N" T6 p+ ?" ~ case MIB_IF_TYPE_OTHER:1 b/ T8 D9 O4 `$ B2 J' v
cout<<"网卡类型:"<<"OTHER"<<endl;
/ Z& b% g0 [" f* u8 F$ Y break;. @- u9 D0 a: Y
case MIB_IF_TYPE_ETHERNET:+ D9 w4 e/ K8 R
cout<<"网卡类型:"<<"ETHERNET"<<endl;
3 P5 l+ w; x8 I# Q8 g0 X break;1 G0 S% x" e& G$ w3 s
case MIB_IF_TYPE_TOKENRING:; I5 o4 K* W% e) l# J) v( {
cout<<"网卡类型:"<<"TOKENRING"<<endl;) T7 @; n9 Z3 f q
break; O1 a- N, @! A) [3 W# Y
case MIB_IF_TYPE_FDDI:/ ]) ?; Y6 }, P; }1 ^3 w
cout<<"网卡类型:"<<"FDDI"<<endl;
2 s6 J, W3 P, _6 N6 B- Z break;
$ y1 a! s1 l7 w! ~; B case MIB_IF_TYPE_PPP:
6 j7 ~. R+ |/ H: r; R/ x/ Z) G# F printf("PP\n");
6 m8 s# O- @3 T- f9 D- G cout<<"网卡类型:"<<"PPP"<<endl;
% z- k( p8 m3 N; _* o" X9 g break;- a% l+ u( w; q" Q
case MIB_IF_TYPE_LOOPBACK:3 r- v$ \. f5 P% Q, A4 p
cout<<"网卡类型:"<<"LOOPBACK"<<endl;9 z) W( ^; a E" P: C! X
break;
! h2 H. L% g" A* q: V case MIB_IF_TYPE_SLIP:
* ]! B: h; D) @, k cout<<"网卡类型:"<<"SLIP"<<endl;
1 Q5 S5 L' q9 r8 X; X break;
) r4 [; i, f7 ^3 Q9 Z" s default:
7 z5 h1 E8 Z Q7 l- d2 y0 h0 D& S# A; A) M7 k6 A n4 }$ P1 e7 Z
break;4 m# E O. X. F) [( d+ z/ b) J0 m
}
' o z2 {( ^/ x7 K# C6 n, _ p cout<<"网卡MAC地址:";
2 ]2 o- S. t8 D& S8 y3 u( u3 p for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
# h7 C1 C/ P! R( ]$ y' \( S6 m4 c if (i < pIpAdapterInfo->AddressLength-1)
* D- d6 P& ^9 _+ R1 p {
# Q: N. ^- M7 D printf("%02X-", pIpAdapterInfo->Address);. | ?. |0 e: U. a
}& V$ f2 K5 a/ I0 I/ w6 y
else
/ t# t& L* }" i. e7 g! m {) {1 F0 K( o& A: u! ^
printf("%02X\n", pIpAdapterInfo->Address);
5 ]! o. ^! c0 v6 e% J0 ~: E }
4 ~/ q- p6 t/ f5 J Z cout<<"网卡IP地址如下:"<<endl;6 _. j/ j0 h3 T0 t! h2 w* p; p
//可能网卡有多IP,因此通过循环去判断( L K9 R7 F1 I9 r+ A. T4 a
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
; _ r& Z1 `8 p' K) [- T do) Y7 @7 \0 R, ~7 f; o
{
9 f- x- N: l4 ?0 I2 M9 _ cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
& `6 Q! }$ \# l* _7 v; L, ^. m9 [ cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
% t) ? k$ d) {& Z _ cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
' {/ i, X7 L- [% Y- f6 r cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;- z L1 b s; b1 h( h2 |
pIpAddrString=pIpAddrString->Next;
. o; Y# d0 {5 ~8 z8 |! b } while (pIpAddrString);) C/ m7 O7 Z( t; `8 J0 }; i
pIpAdapterInfo = pIpAdapterInfo->Next;8 E0 R# E% y; x C3 {' z" q9 J
cout<<"--------------------------------------------------------------------"<<endl;
4 c+ y q9 f- n/ {+ J/ B0 P4 A9 O1 h }
2 F& k7 Q; {( x , O1 u, D& e& i6 C5 H- h0 M
}
# B# M* L4 r. F, q& u, M( t //释放内存空间
* _: A- s9 T) b R. p; o if (pIpAdapterInfo)
' G w' o5 j0 g8 `" e {
7 E8 J Y) t; h' S! O' v delete pIpAdapterInfo;
0 B& I3 `! d) p2 w/ A% T }
% e$ L$ f, i; G1 v% R ; r/ k; e4 X8 A6 C& j) L
return 0;
/ O# v# ?: t: u, `( h}: U+ N, Q4 d+ ?3 ]( B
* N' F+ v$ [1 C |
|