|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
$ f; k) P+ `; a4 ~' p. U; K
+ G% j; J: p0 B6 F8 T# R8 B' W2 h5 K3 D# k! p+ s/ x9 ]' y5 r9 p
// 头文件包含& R* h4 T/ V& w% @" Q
#include "stdafx.h"+ [/ b" |" Y: L+ ?% u! |
#include <WinSock2.h>
* ^4 Q* s9 T' t! V/ Z) o( M4 D! d#include <Iphlpapi.h>+ r/ J- L+ J. G6 y3 k7 @
#include <iostream>
7 i, v( q) X( h7 q, g' X" @, }using namespace std;
. m; c u Z. J# S// 函数声明; J9 Y* x' k3 e% q8 M
void output(PIP_ADAPTER_INFO pIpAdapterInfo);/ ?& B( B0 U, l( {4 |
// 程序入口
! F# q% d- D9 z+ X3 j9 ^int _tmain(int argc, _TCHAR* argv[])6 K. b" E/ a9 O: m6 x" W3 f
{, B( r! a2 f4 p5 H1 |" K
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息/ `3 v3 a5 `8 d L, R* @
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();9 j7 q& X' [1 P3 _$ `& e
//得到结构体大小,用于GetAdaptersInfo参数
+ c6 o0 ?- N: [1 n& a3 O unsigned long stSize = sizeof(IP_ADAPTER_INFO);- ^5 C2 [$ s m% V
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' f# e- ?' E0 n, _- }2 u: y
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);" w4 `/ B5 V E! \" K
if (ERROR_BUFFER_OVERFLOW==nRel)9 c# b, f! e! Q4 i; v0 q8 F
{
2 ~9 k5 f) R- p0 W+ t4 A //如果函数返回的是ERROR_BUFFER_OVERFLOW
- b" C# M, ^$ A" H. ^ //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小" a- }! z- y1 i" P6 U
//这也是说明为什么stSize既是一个输入量也是一个输出量
, X4 E4 [" N* A/ ^4 u //释放原来的内存空间8 P( S- q% t c, a' K
delete pIpAdapterInfo;- B5 h# E8 D/ u7 A' O) w
//重新申请内存空间用来存储所有网卡信息, {& K1 H. ?* V$ b4 E
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];8 e" G/ ]+ i5 T Y) ?7 O8 |
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
/ l$ d0 a3 C' K9 U. ~. g. I6 U nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); * `( q- e6 K- ?" u
}
% T L, B8 E- ?* ? ~ if (ERROR_SUCCESS==nRel)* |" U; k- g! D) c. W
{: e, ~' W+ r% i; O) P2 q
//输出网卡信息
8 V; _; }( |5 e. t output(pIpAdapterInfo);
) S) E) l4 D) f* i }3 a) Q0 v4 C( {1 t$ a
//释放内存空间& ~ \1 p; O# p4 v1 s
if (pIpAdapterInfo)
2 d W& ?3 E, T9 `" [" Q& X {
) b9 a: G6 u' l- v2 E delete pIpAdapterInfo;
+ K7 f9 W' ]0 h: g5 R! k }
/ ]2 x! S& l0 r: G, v getchar();
; u$ G. m" O3 c% N# g" I3 }: p return 0;
2 A' ^! U7 Z7 W}
L( a$ D$ S2 a///函数作用,输出网卡信息4 g8 F) @* S1 D2 M8 u/ k" W
void output(PIP_ADAPTER_INFO pIpAdapterInfo)2 A) i* A5 j; k6 ?: v6 W
{
U/ Q1 n$ i8 I. S' h1 x! A. ~ //可能有多网卡,因此通过循环去判断
% B5 j6 z3 @, k. J' e; A* ^ while (pIpAdapterInfo)" t p5 T4 G6 K! f$ w9 t U
{, t5 L+ X6 P# W7 X, D
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;; ]) f; u2 M. X: }! C
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
) u- D* i0 @1 v) S* D- B cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
% P& J! Y$ V! s! z( w$ ~7 p for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
% W& k" H( `9 f! ^ s if (i==pIpAdapterInfo->AddressLength-1)& D1 l' C [# M' C8 ^
{
9 z: |* G) J1 ^ printf("%02x\n", pIpAdapterInfo->Address);
; u7 m/ Q0 B1 b! x% ] }: {( V2 \7 e3 n, J* b+ j
else
1 l; d, r+ K, w7 _) V {
/ S' i0 m; ?$ F: A( }( h/ W3 h printf("%02x-", pIpAdapterInfo->Address);. ?" e& E; B# M+ s0 R) a1 m3 O2 Y
}
}8 _9 r, G: ^. T' k( f cout<<"网卡IP地址如下:"<<endl;1 K% D3 P* B1 E
//可能网卡有多IP,因此通过循环去判断
( j( H8 `1 N7 U+ F% ^ IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
7 v% I* t3 M7 |) D+ u0 \2 G do , Z1 g. ?8 ~* K! A3 Y7 D1 e
{
0 n5 a2 b/ g; z' {( K/ w cout<<pIpAddrString->IpAddress.String<<endl;
! i+ e; r! {6 R% @ pIpAddrString=pIpAddrString->Next;
0 n/ h7 _" s3 `- O k; ~ X L( C } while (pIpAddrString);& v0 x/ g' Y' T9 H! f. Y6 u
pIpAdapterInfo = pIpAdapterInfo->Next;0 p) i; R; u; T. H' I: X
cout<<"*****************************************************"<<endl;5 r b3 a6 d; [; C$ E2 k# h! A
}
- g1 K3 T$ }/ T4 I4 I return;
; e' g; {( r5 w! h! Z( f% S}
& ?; ^, I" F' @1 Q |
|