|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
#include <WinSock2.h>
6 F- f1 y. ^8 V ?#include <Iphlpapi.h>
9 B$ _: F6 M* T5 ]1 B9 V& l3 V6 P, q#include <iostream>! d3 \$ e9 D7 c! E( A" a+ w
using namespace std;5 b. d- l) U2 D5 a" p
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库/ |7 X3 i; L) G3 Q. }
* Y! s& y( r+ J2 a9 i/ v, M( [
int main(int argc, char* argv[])8 T" c4 U9 m9 L8 N$ b
{4 _4 A/ x, L; O5 Y, b# N* n0 Q
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
9 d, D' D% Y) G( Z1 P5 D PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
* m }/ b0 s( k$ ?6 a2 ] //得到结构体大小,用于GetAdaptersInfo参数
6 x2 L, ^/ H# T6 S+ u unsigned long stSize = sizeof(IP_ADAPTER_INFO);
2 h8 `" t8 _" @" E2 K/ L //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
3 Z3 [1 ~1 k1 r1 g int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
8 c% H5 z @& m N$ d1 j //记录网卡数量
( g* j4 o5 |. K6 A# n int neTCardNum = 0;
: |2 x7 z7 M! \ //记录每张网卡上的IP地址数量
5 O7 ~; _3 @; `$ d int IPnumPerNetCard = 0;
' U' Q7 ^3 n4 V# `5 T% p s! f% Q if (ERROR_BUFFER_OVERFLOW == nRel)
6 C; P1 Z- f7 k$ h, h) p& W8 W {. O0 F3 ~! V$ @4 ]4 m6 I- ~( k- c
//如果函数返回的是ERROR_BUFFER_OVERFLOW$ P1 D/ n* a/ F, U. D0 [
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小, A4 Z" c6 V+ t- ?. f
//这也是说明为什么stSize既是一个输入量也是一个输出量5 Y6 ~$ `! S9 _3 u* `' q
//释放原来的内存空间, B+ ^( I: {6 r6 k1 P. n
delete pIpAdapterInfo;
, ]3 _4 ] ]0 @1 ?: U( O //重新申请内存空间用来存储所有网卡信息
/ p: A7 `; u: ^! Z pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
5 n- `7 Q# e; m7 p //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量8 F. h; \, y; [* t$ ^9 y# X
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); 1 q8 u u3 p: r+ ?1 w
}
% Z) ^8 A* P9 [5 O+ Z4 R if (ERROR_SUCCESS == nRel)! O2 O, C- R% I2 B( h. y
{" F3 |. d; C. V# x7 y# x" V0 n
//输出网卡信息7 B. \+ W5 |- m: T$ g. N
//可能有多网卡,因此通过循环去判断
/ K | r/ ?6 \( k( @7 Y( f while (pIpAdapterInfo)
6 R! h0 Z4 Z& x6 }& _: i {2 D5 v8 I. z4 [6 ~3 a* u) k
cout<<"网卡数量:"<<++netCardNum<<endl;
5 _7 m8 D- p$ N/ _+ G& x, ]# ? cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;7 I! U& }2 ^) H! v/ ^% l1 ?
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
4 K4 v z+ W) c% |; V6 b switch(pIpAdapterInfo->Type)
* t' v4 a/ ?4 J2 B. d5 c5 r {+ e' ?' } _* p
case MIB_IF_TYPE_OTHER:7 a: ]+ j1 ^7 g) u: ^4 V
cout<<"网卡类型:"<<"OTHER"<<endl;
) a" |8 @) g# _* J4 i1 n+ ^ break;
3 H+ L+ j! i" p$ j _( b, g case MIB_IF_TYPE_ETHERNET:
+ y& D) Q/ O) ?/ ? cout<<"网卡类型:"<<"ETHERNET"<<endl;9 z2 k* I5 Y6 m: [
break;8 H t) V' l2 i' H4 p. T; v, K. _( U& D
case MIB_IF_TYPE_TOKENRING:
/ Z! p, H. {9 ?1 k7 o$ { cout<<"网卡类型:"<<"TOKENRING"<<endl;
+ V' X# p3 B! @+ t8 q! P+ C/ Y1 x2 M; J break;! d# ?7 r* n1 T2 D, p4 M! J% Y
case MIB_IF_TYPE_FDDI:
0 }( J, A. _) n) c cout<<"网卡类型:"<<"FDDI"<<endl;: j7 @3 l* ~5 h2 s9 P3 L
break;2 |) ~: a* ~ E, b8 a. l- X
case MIB_IF_TYPE_PPP:* t: H3 X% N8 H# P, o
printf("PP\n");( g( H0 n) z( y2 I% \- w
cout<<"网卡类型:"<<"PPP"<<endl;
, A1 F( a+ Q. m5 \ break;
! Y* p4 t+ s9 Q, r; s9 V case MIB_IF_TYPE_LOOPBACK:
+ g* J6 O% f: ~0 M0 t cout<<"网卡类型:"<<"LOOPBACK"<<endl;" P2 c! l/ L. r
break;8 d" [3 E& n4 k" Y$ |2 K# ~6 Q+ Z
case MIB_IF_TYPE_SLIP:, c; r! @7 B, A4 |, X
cout<<"网卡类型:"<<"SLIP"<<endl;
7 ?% m& ]" b$ d6 h break;
* i* B& L) k# W$ K" U default:
! M6 V2 y5 Z. l; O7 {; M' L) q) u1 @$ F9 b$ d% H9 b# S5 Z
break;" Z: n, H- w7 L3 z. i d6 T( c, x7 N
}
8 Y( I! H+ |8 ]4 t! l cout<<"网卡MAC地址:";
~+ l& ]: G2 k5 _# P for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)* C# `& b3 h: G) C8 K
if (i < pIpAdapterInfo->AddressLength-1)5 v+ u( f2 z& b: d5 u( V4 ?
{2 i" |1 ?) ?9 p1 I6 l% U$ d
printf("%02X-", pIpAdapterInfo->Address);
5 Y9 r; [$ L# q. c' q2 s' E; H. G }
# q% O6 I( m, E6 ^4 h& { else
4 b9 \! a6 a* p) e+ O- H' p {
# [' k! {/ y5 B: a% w printf("%02X\n", pIpAdapterInfo->Address);( W0 B1 O3 Y4 g' T
}
; `' i0 u; D; | cout<<"网卡IP地址如下:"<<endl;
$ g! g( O/ e( J- S h# z/ M' T //可能网卡有多IP,因此通过循环去判断
: w$ ~5 e8 O% K s) f IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
. Z! X" O8 a* v$ m$ I% Q9 I do; ^# a( ?& P) }, U
{8 `; c0 G9 |- E4 l6 ]
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
; b9 q+ t+ D0 x8 Q cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl; R2 m7 Z" f J1 `1 m
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
, D/ h( a- ]4 C3 Q cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
* M7 u7 o. t6 d! E- M" F pIpAddrString=pIpAddrString->Next;( @: S( r2 w. V9 L" E' @
} while (pIpAddrString);
; y$ A7 u6 j3 J' i2 D4 I pIpAdapterInfo = pIpAdapterInfo->Next;
6 }1 s8 G( ?& |, L7 Y cout<<"--------------------------------------------------------------------"<<endl; E6 c8 ~- J( T0 C* ]" V6 U9 C3 H
}9 b7 S) m4 w! H3 f* f% K( ^
8 W0 \/ G& r1 {/ y3 c5 r D
}1 K2 v0 O1 Y+ J& T4 p, J' q
//释放内存空间9 ]* E1 a3 y, s
if (pIpAdapterInfo); X# |' X* x1 v, D9 B
{3 Q( I# l' W3 F8 L) V- V* X6 y
delete pIpAdapterInfo;
2 S- Y. j/ B' g8 u; }% q" e: l }
, U0 _5 Y9 |1 A; L, O4 q - A! `5 W2 }2 E T* z
return 0;
5 _$ t: \8 j/ M/ K5 ?}
# ~0 X& k) G" k
$ o) `3 s& l- f( ]1 Z" [ |
|