|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
+ v+ t6 c2 D0 W1 d! w
( g' W y: F+ F( R4 {* ]
; P$ D( K! }% {
// 头文件包含
. H# W6 l/ e3 |, `- P, l8 e2 ~#include "stdafx.h"$ b+ `, n8 r: g4 n1 f! ]! Q
#include <WinSock2.h>
. h4 A; W* t' M#include <Iphlpapi.h>
/ k& _0 C% E2 G+ k+ V#include <iostream>
8 W, f' U! H! E2 |& Iusing namespace std;
, `7 R( X6 h1 u) A" G# @// 函数声明: r. \3 |4 d; _. n' k& y- T) M4 _
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
) W: ]) r z! G: u7 J) g& G; |// 程序入口4 ]/ L9 `5 r) A6 Z$ L; F8 E2 X
int _tmain(int argc, _TCHAR* argv[]) R2 v2 A7 D% A, I! w
{6 u) K3 g1 c* d
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
2 \( L2 S' T k7 {8 A PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
4 [* @; T) q y6 L; [- C6 W //得到结构体大小,用于GetAdaptersInfo参数: E8 J4 r' n" f. T1 n0 Q$ {$ p" {
unsigned long stSize = sizeof(IP_ADAPTER_INFO);7 k9 i+ t; f- D
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
- i* j' {: |* Z: M, R int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);) \7 E. e- O4 @
if (ERROR_BUFFER_OVERFLOW==nRel)4 m" a5 g" I9 X4 z
{
7 H+ y- w( D m6 Q X* C //如果函数返回的是ERROR_BUFFER_OVERFLOW
& ]! W, k% ~ i& `+ _3 o5 T- c; s9 b //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小3 E9 o0 ~: U9 c# w# M, Q9 p' Q% X, v
//这也是说明为什么stSize既是一个输入量也是一个输出量
$ U( y! N& }. \# b% N7 y+ _ //释放原来的内存空间: F0 Y+ t1 \" w8 z' S1 y
delete pIpAdapterInfo;
( A8 x: O6 o: h Q: ~0 Y) @+ J) [ //重新申请内存空间用来存储所有网卡信息' U; R4 Z8 }6 x+ u8 S
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
3 q0 F1 U; B% j9 a& @" ] //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
. Y& B: d" o0 X5 h nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
8 G1 j$ m o8 G }" K) ?+ v. I' C# L1 l0 d, ?1 s
if (ERROR_SUCCESS==nRel)9 n* x4 k! u3 B3 m6 C
{! d7 v/ ?5 _7 c) v# Z
//输出网卡信息
7 x3 r! R' g S1 V$ `6 f output(pIpAdapterInfo);" j J* y* O" {/ T1 ]# r5 J$ S5 d
}
8 a' ^) E0 @' F5 \. W. z) A* E //释放内存空间
9 ]8 _$ t7 G2 J. Q- Z if (pIpAdapterInfo) N' C6 }4 e" N3 F
{, G) ^8 c6 i" n ]6 J) X
delete pIpAdapterInfo; z |; T# n9 q5 w8 a( Z8 Y' A2 w
}
6 e# A9 p, d" Y+ w* u getchar();
8 b8 J# R V0 i' {$ V% N9 w0 C4 { return 0;, v+ b1 K3 n& P+ V2 u0 c
}
8 _" H ]4 R2 E# ?5 T9 x///函数作用,输出网卡信息) k4 T) @( _- o! ?4 u6 N# c
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
J: W1 _# J- Q9 m+ ^" t{- ]0 Y- Y& a5 ~ S
//可能有多网卡,因此通过循环去判断
1 i, y' F) F+ T- |& b9 v+ }8 ?% N while (pIpAdapterInfo)) v3 m% s0 O5 f* K$ e0 X
{
7 v6 F: R1 N+ |- o1 | J% \, ] cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
* ~( o7 S( W1 O3 J3 c, h* H3 W cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
6 P5 L2 d$ [" m cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
" h/ b+ Z% t, e" l k; G* T6 ? for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)" X$ b4 _7 U$ S
if (i==pIpAdapterInfo->AddressLength-1)
# d( y5 E1 I7 X4 U9 S& u) ` {
0 _* A& Z+ v' ~1 d# D printf("%02x\n", pIpAdapterInfo->Address);- G* ?& k/ @8 W( {9 w; J7 A
}
X, M7 ?% M/ F- e |9 s2 R else: b/ Q3 X Y Y9 r0 ~
{
7 q+ n( b, r; R' O4 W- C. w9 w printf("%02x-", pIpAdapterInfo->Address);
0 n& H( u# F q }* r( w! |9 z: a' H1 ^/ {7 T0 f
cout<<"网卡IP地址如下:"<<endl;
+ y: v7 b/ a& y5 i* J //可能网卡有多IP,因此通过循环去判断
( A* I2 I* l" N/ p IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);4 {% D: X( ]" A
do
& e# I+ w& ~, k) @, m B {
. n* b# e) V. \ cout<<pIpAddrString->IpAddress.String<<endl;
/ m V/ ?. ~1 |/ Z pIpAddrString=pIpAddrString->Next;
2 b2 `4 Q. T/ J- t6 \# Y } while (pIpAddrString);
! ?3 ^6 N0 x: S% S& O$ C4 e pIpAdapterInfo = pIpAdapterInfo->Next;8 U/ M* j- ?! k6 ]9 f9 [
cout<<"*****************************************************"<<endl;
, B+ U8 X, M" ^* A. d }
, E0 ]& ^5 {. u* K4 E( j7 { return;7 L* n C; X1 h# K6 _
}
! y# ^; `& [, g2 p; Y0 y- C |
|