|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
' \ ^( U& W# u#include <Iphlpapi.h>7 M* [" Z2 T1 I
#include <iostream>
" k$ y" `' P! ~2 G, k7 j5 gusing namespace std;
1 I: q" \+ k# s Y#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
+ ~$ V: h' l9 j* p/ Z3 \4 H! C' |3 Q9 a
int main(int argc, char* argv[])0 }1 C$ a. ^5 Z/ q5 k; R
{
6 k6 r9 X8 F& ^. c: F, B7 } //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
. _, J' U( o2 _ PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
/ u$ T# i2 |9 {" l8 g //得到结构体大小,用于GetAdaptersInfo参数( Z5 Q' y+ w! I. U- N
unsigned long stSize = sizeof(IP_ADAPTER_INFO); \' Q) n' D" j8 L* x0 t! C
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量: d0 x! Q6 _% w8 C
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);5 ^4 s K; z/ u1 W% ^
//记录网卡数量4 Q$ n% h8 J4 [: p) s
int neTCardNum = 0;
* g: Z* w4 ~8 m( ]/ m/ o% \9 M. g9 M //记录每张网卡上的IP地址数量
( I0 U# a0 ~& n& R: x6 p8 S int IPnumPerNetCard = 0;# p9 V3 R/ S$ s. k. R7 P
if (ERROR_BUFFER_OVERFLOW == nRel)4 ]# F8 w+ p4 y; Z
{' }% w! Z' ?% m9 @% l! f" ]
//如果函数返回的是ERROR_BUFFER_OVERFLOW. {. p6 {3 \8 o8 K# ?: t& |- b. V
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小* i* ^8 r% `- A) U) L; @
//这也是说明为什么stSize既是一个输入量也是一个输出量# c. ^. l5 }) y3 u9 t2 S4 c6 B
//释放原来的内存空间4 U6 j, i, D! w! Z8 R8 z5 c+ m
delete pIpAdapterInfo;
$ M- N" W2 G1 S' z //重新申请内存空间用来存储所有网卡信息9 I% B3 z4 B" c1 F; h1 ~
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];9 x* _$ n, S8 O5 L
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
! _) r' o% c$ @# q' W. z2 r f" D nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
6 ]& X Z" Y" L; r1 [% _/ P2 O }& B, g- |: {9 b1 D6 j: D" [
if (ERROR_SUCCESS == nRel)
* Z. F E& `; ^$ c {
* B& g! v$ b+ o8 X) z //输出网卡信息
5 T& E' M) Q& n4 ^; P //可能有多网卡,因此通过循环去判断1 b% `+ u8 `/ J' R( f. F4 }6 \: ?, l) J
while (pIpAdapterInfo) e0 c: _% v0 j' k- a9 P( L1 Q2 I
{
/ A; m8 d& P% l, i, R+ p cout<<"网卡数量:"<<++netCardNum<<endl;
$ `& p# k& ?! ]* v cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
# ]! P+ f I8 B$ Z F+ K2 W" X! J cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;" u9 M1 d* _2 N
switch(pIpAdapterInfo->Type) P2 G& W6 S5 b& g) O9 N
{' W0 W4 G8 t f$ u2 p3 Z
case MIB_IF_TYPE_OTHER:
* a) U8 R) i1 I& }5 g cout<<"网卡类型:"<<"OTHER"<<endl;6 ]/ x* N" x! x0 L0 j, [
break;
7 O( G0 I/ w" U; |+ Q case MIB_IF_TYPE_ETHERNET:
* n! h3 ~7 Q7 H0 S cout<<"网卡类型:"<<"ETHERNET"<<endl;
7 Q- ^# s# L" E6 u2 E break;, `0 O0 j3 r2 F# s) J6 Q
case MIB_IF_TYPE_TOKENRING:
7 r: D! A: i# I6 ~4 @. M- p cout<<"网卡类型:"<<"TOKENRING"<<endl;
% M4 j) D1 `% E break;
' Z% V' P0 K/ E) c2 Y. [ case MIB_IF_TYPE_FDDI:! n) `8 x: I- d. x$ W9 F$ d, d) s
cout<<"网卡类型:"<<"FDDI"<<endl;
9 s) v5 J% f) I5 }8 { break;6 L/ ? Y8 i5 W) S
case MIB_IF_TYPE_PPP:+ b" `6 P3 u2 p5 y
printf("PP\n");
* C0 Z/ N8 }' q6 { c% C cout<<"网卡类型:"<<"PPP"<<endl;! q! l/ I! E f/ }! \( k
break;
7 }& A0 U4 a8 |" Q' o0 r+ K case MIB_IF_TYPE_LOOPBACK:- m8 ?7 E0 ~, ]0 q3 l" ^
cout<<"网卡类型:"<<"LOOPBACK"<<endl;% _) t. q: P! x2 T5 r) Z* G$ ~$ ^
break;
$ |* @. J' ~7 G% W case MIB_IF_TYPE_SLIP:
; R4 w/ x5 z1 h" P: ~' Y cout<<"网卡类型:"<<"SLIP"<<endl;) ?; z5 a2 ?$ A3 a4 T' `" n$ {; C
break;( H ]9 s$ G" v+ l
default:
# m* Y% u9 H( h" t% L& A0 u5 ^4 k, k. t
break;
. Y9 l! \1 B E/ N! Y U+ c9 T }0 y- |9 h8 P4 Y4 p, R
cout<<"网卡MAC地址:";; s% [7 \( G3 [
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
8 L+ \+ u7 Z% V3 s1 | if (i < pIpAdapterInfo->AddressLength-1)
) _4 r4 Z J, \! v+ ?& F {
: B% E! B f' j' I. q* L- U printf("%02X-", pIpAdapterInfo->Address);: G+ H, {8 q& L7 }7 [ a A* ~
}
3 Y! C8 P7 p8 N2 [ else% `7 i8 ~9 A2 l2 d
{
b4 r, k7 f' Z7 x' T/ b- ^ printf("%02X\n", pIpAdapterInfo->Address);2 T+ q h0 ^- c4 ~
}7 e `1 u. E2 W; f& E% `/ E) z z4 G) Y
cout<<"网卡IP地址如下:"<<endl;
$ Z# q4 y: V4 E; ` //可能网卡有多IP,因此通过循环去判断
( X ]: S4 F) Z I: s IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
! D/ a1 S- I9 q do1 x1 C1 ~5 |3 y/ K! x
{4 U+ w' h; q/ b6 c
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;& c2 ]$ g, \/ d: m+ [# k: G8 P* b% X
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;" M- H$ b" n0 C) q( x; X
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;0 ]+ L4 J9 t: ]. z _, u5 H
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
9 F* d. g! s. J1 S& |1 b& y, C3 H( Y5 t pIpAddrString=pIpAddrString->Next;
) T% T$ R3 O1 j, S } while (pIpAddrString);
% l9 T5 s. u" I2 X8 F$ r5 u8 r pIpAdapterInfo = pIpAdapterInfo->Next;
, u+ j9 D$ ~$ E$ ~4 x cout<<"--------------------------------------------------------------------"<<endl;8 w) V s5 \! J8 g
}- n. \) w/ \% N+ M) ^
- o9 \. J' M9 p0 J9 |+ u. U# Q }
4 L7 r0 C& e) z+ M( ]* A //释放内存空间
; E# [' r' u( |) K. k if (pIpAdapterInfo)
9 [9 _3 l1 M1 C6 {6 L {
+ g: [2 M# u7 @+ t+ H p7 [ delete pIpAdapterInfo;
! X0 a; y, B! V9 F }' i5 ~( j% Q" ]& c
" w* Q& T, E0 M7 Z8 L g" G return 0;
* X$ y2 o: J% l} `& f* k; n6 h
4 d# n- ^( n' E4 u, z" m1 T3 H
|
|