PLM之家PLMHome-工业软件践行者

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

[复制链接]

2017-10-11 21:24:30 3031 0

admin 发表于 2017-10-11 21:24:30 |阅读模式

admin 楼主

2017-10-11 21:24:30

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

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

x
' A0 S1 Z# d, O: y% I2 j
6 }5 z7 N+ N+ N* V4 M
, H' B/ \: ^( D- |
// 头文件包含) N, j$ R/ j/ c6 C1 w, ?. \
#include "stdafx.h"5 r% b2 ^9 k. H6 l) f1 C( f; H5 h4 H
#include
<WinSock2.h>( q9 z) E. x, P4 @
#include
<Iphlpapi.h>
6 c9 H9 |0 Z- x! @#include
<iostream>! q  o9 M+ {2 h! j
using namespace std;
; e1 y" o+ Q' o
// 函数声明
4 P# r2 {7 I; [# X' n) L# J
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
1 Q+ R% [; d2 ?- G+ A
// 程序入口
* V9 M9 C; j9 s
int _tmain(int argc, _TCHAR* argv[])* O1 `( m; s& x' C2 y' c2 F$ M7 z
{$ S4 n0 Z& ]6 q8 u1 O- o- [' ?' [
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
+ ~' z# j+ v; `5 P  B/ y8 P( N
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 o$ w1 G6 Y0 A5 D7 F   
//得到结构体大小,用于GetAdaptersInfo参数# v! {# J8 c. w8 r
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);- @, R/ O1 q6 }) q9 w
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' |% q; N# a( I& y6 S$ p! N8 ?! P9 e
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);% h, B: M) g! {
   
if (ERROR_BUFFER_OVERFLOW==nRel)4 p' h; D- Z# x# [) {: o
    {8 J. d% W/ S; D& p/ }8 r! `
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW* f+ E! D6 `  N* b
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小% }, c  m8 T9 n( L0 j; l$ [7 S
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
! F* a: x4 ?9 U  A5 s. c        
//释放原来的内存空间- T* N  V0 e9 C7 b' L- L
        delete pIpAdapterInfo;
6 M  W8 K* p& l  P1 v: d6 R        
//重新申请内存空间用来存储所有网卡信息3 G8 g/ C* t1 |2 M" _
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
$ s- D- s' O7 V5 \        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量# \" R8 D$ ~3 x
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    , _( Y7 l6 y& z2 A$ r1 j
    }, }" d8 E) m0 M
   
if (ERROR_SUCCESS==nRel)
; ?: P" }. d3 _/ B    {
2 d5 a' x2 q) i* h3 m, A1 t) h        
//输出网卡信息
4 B3 E3 B( @* J+ H: Z
        output(pIpAdapterInfo);
! I% D# s( _4 h0 e0 o    }
7 C1 ]# D% `  Q6 p. {2 r   
//释放内存空间. X8 q7 e' i" K  v- K% z  T1 Q, |
    if (pIpAdapterInfo)
. v. ~" j/ J4 |# \. I* A) A    {. \; c; K4 R+ t( s
        delete pIpAdapterInfo;4 D& e/ B* ]: }
    }
. F; o6 m' x/ ?: r+ W$ }    getchar();3 C# `6 k0 p) t0 b
   
return 0;# S) A6 `! F$ M; c  Y
}
- k1 |2 f* h# }* i+ \  q) i
///函数作用,输出网卡信息
+ r* Y' n3 P1 b! L3 }- B
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
% c7 ?" N7 [* x0 @{% F$ a5 q+ B& j5 W1 S; c  k
   
//可能有多网卡,因此通过循环去判断8 Z) K7 t- e. Y% Q' b
    while (pIpAdapterInfo): C0 n8 s# |2 u
    {5 z  u& H, j+ M
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;+ M' y+ U2 q: g8 ^( E
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
1 ]; Z" Q) H; l- Y4 P3 u, o! t        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
* g& t2 Y+ V7 g" l- |& R        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)& @4 [7 w; h2 q3 L% K) T, }
        
if (i==pIpAdapterInfo->AddressLength-1)
! o" M: B8 ^- d/ E        {" w3 n+ R; q" w" T
            printf(
"%02x\n", pIpAdapterInfo->Address);
  k* U4 v- u9 C1 |        }) C; L) l0 d# ^( K, O
        
else
2 F( Z8 Z( L, w        {- ]5 H, f: B6 J, P* ]
            printf(
"%02x-", pIpAdapterInfo->Address);
) f" D  X; l3 `% L4 w" a        }4 M# J' W6 V' D$ s$ a
        cout
<<"网卡IP地址如下:"<<endl;( E/ R1 N( P. I/ ?0 E
        
//可能网卡有多IP,因此通过循环去判断
7 t' \( t1 K8 ?3 J9 _
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
: S, K0 ^" z9 }9 X! u4 o        
do ! C) g; i6 y5 ~! `
        {
: H; [! L" i; {5 v8 F; o5 `+ k            cout
<<pIpAddrString->IpAddress.String<<endl;' |; M( J6 J* S, `8 Q  a
            pIpAddrString
=pIpAddrString->Next;1 i+ I8 O+ Y4 Q& ?/ d7 @8 h; \
        }
while (pIpAddrString);2 T/ Y; q; L( T$ N. l: B" S
        pIpAdapterInfo
= pIpAdapterInfo->Next;
! R0 ]6 {( R6 B' t8 m9 I1 s        cout
<<"*****************************************************"<<endl;
2 W% Q" W, }2 V    }8 B  W, E& }! g
   
return;
0 u  o0 d) J$ [2 g3 l* r}
3 {2 B6 m: g* q% C- g( T
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了