查看: 3235|回复: 0

[转载电子书] C++的方式获取当前系统的MAC物理地址

[复制链接]

6

主题

4

回帖

60

积分

管理员

积分
60
发表于 2017-10-11 21:24:30 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×

# w! M3 x- J0 E5 s* I+ E( f* [  h0 r% H+ F+ Q  v2 r

" [# `0 e& f2 `5 N& v4 r- U// 头文件包含2 K' [/ e; r9 K, Q& k7 l
#include "stdafx.h"
0 g8 D! e/ h7 I3 J6 ]6 f#include
<WinSock2.h>$ v2 K+ x* v8 V% D: p6 H
#include
<Iphlpapi.h>
! [3 D! ?2 r' n% E7 A2 E#include
<iostream>3 {; l, h& r$ x' [. ~
using namespace std;
8 m; ^5 l2 h/ W/ ^
// 函数声明% K% S: D% a# x% B- k+ a. g
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
  G" w# o- z/ }, [/ r0 l
// 程序入口
, e8 s& E  \* ~! b
int _tmain(int argc, _TCHAR* argv[])
  V/ h7 {# n2 X4 a6 z3 c{
3 |, b9 C. I6 @* T   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
6 N7 W: ]+ _! N) x% @
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();% V$ O' p. [+ Q: }
   
//得到结构体大小,用于GetAdaptersInfo参数* n$ s% X1 l0 ~; G8 m
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);! u5 @  I, F8 q7 H; \. T
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量0 \. Q5 W1 F/ C+ N- \
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
+ E. J9 _! ^" t) b2 q. g   
if (ERROR_BUFFER_OVERFLOW==nRel)
3 w" e4 p& E# }7 G6 m- H* T    {" z  Z) \% Q% W! k/ j. _
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW  O, `. k" L: Q
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
0 b+ b* Z2 @- r6 T2 C. d( d& b        
//这也是说明为什么stSize既是一个输入量也是一个输出量
- ]0 ]* {7 M0 Q& a        
//释放原来的内存空间# K0 F; {3 q6 v7 E- a( V
        delete pIpAdapterInfo;
; y$ G! Z" n& S3 p$ R        
//重新申请内存空间用来存储所有网卡信息* p/ Z0 b6 a" k6 A# Z- i2 C
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
) d9 U+ h6 t* ~6 }        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量9 z( o4 g# h% a* T/ d6 I; V4 L
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
2 T3 l1 N0 U+ b3 s8 I    }7 m7 E9 T2 X8 N; ^2 @  }
   
if (ERROR_SUCCESS==nRel)
9 T) l5 a; {% k0 U; |    {
/ {( Q, g( c) r        
//输出网卡信息8 C* o' o! s4 d0 S
        output(pIpAdapterInfo);
' U0 G& @0 ^7 ^6 }) f4 O    }$ k3 F/ D/ w5 h2 {) B; \$ q$ K
   
//释放内存空间0 x- v# y2 S# ^
    if (pIpAdapterInfo); y( }' H% ]- e0 X9 k% p
    {5 G0 G( w$ H; ^* f# N
        delete pIpAdapterInfo;( G$ ^6 A; n1 _
    }& E6 s2 }& k- C2 u8 i+ N
    getchar();9 T/ a- v4 Z- V: i$ S  l( F. [) v  ?
   
return 0;( h6 G( ^2 \, i8 f
}
2 z& G7 I2 m/ u. L
///函数作用,输出网卡信息
" }5 F1 l, Y. c' f" n- n
void output(PIP_ADAPTER_INFO pIpAdapterInfo)- ]* g  X5 G0 \; d0 U3 G4 n
{$ c+ x. q! |& c8 |+ m: |
   
//可能有多网卡,因此通过循环去判断6 ^7 Y* r( _- d7 q
    while (pIpAdapterInfo)
' A9 G" ~- d8 l* `0 F    {" [' t1 E- j, `3 q6 i
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;! H2 M/ X/ g# S$ Q" @. Z
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
4 R5 O4 Q0 r: u4 D$ \9 e( e% D4 E# s        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
. C' f# y6 Y1 P        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)# h  ]4 a* B' z
        
if (i==pIpAdapterInfo->AddressLength-1)! t$ Q0 T1 D5 d9 f
        {8 o& L; K+ M5 ~7 P7 d# d- p8 u
            printf(
"%02x\n", pIpAdapterInfo->Address);3 z  T; ]1 t; `$ R0 t; l
        }
* m$ q" ~5 g" A" G9 N        
else
  h2 a" h- [$ R/ [( G; o" f        {' t+ j# X% G  {9 r; a) ]
            printf(
"%02x-", pIpAdapterInfo->Address);; i& c9 Q* l2 Y) P9 n
        }( Z! |" o5 J3 j' }+ |! k8 y
        cout
<<"网卡IP地址如下:"<<endl;
& Z" d* T! H5 _6 s0 S: L4 A. N        
//可能网卡有多IP,因此通过循环去判断
1 \  q7 M3 D/ M: W& R0 R
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);6 Z) _; L- V* |1 J9 h$ |
        
do
. T* J* H- B, b) T% O+ A        {
( a  X. g1 I9 G7 L/ T            cout
<<pIpAddrString->IpAddress.String<<endl;8 Z( t4 w! Y) q' @( u
            pIpAddrString
=pIpAddrString->Next;7 N- O) L. T- C
        }
while (pIpAddrString);7 m  @: Z! I: m  R8 E* C9 P7 C7 U  t1 @% x
        pIpAdapterInfo
= pIpAdapterInfo->Next;
- O9 G" y3 S: B/ H7 w7 P* K; O. S        cout
<<"*****************************************************"<<endl;  e; @+ g  }" V, ^5 q* u% J* C
    }* G' C/ ~: A2 V6 L3 J! ^: r0 l4 u
   
return;
7 y$ r$ C$ T3 e# j( h5 C}
) w5 L0 Q; ]) t. i0 I' e+ l+ h
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部