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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
! @4 N8 F% t0 G2 h

. H5 N+ g3 J2 F9 g7 I% U  b0 f/ a* r7 K3 c2 d
// 头文件包含
1 x5 z9 `* |- u
#include "stdafx.h"
- @6 B2 g/ u, P9 c( N7 z) y#include
<WinSock2.h>2 d: V: N2 s. W6 w5 L" o" N" k
#include
<Iphlpapi.h>1 |' F; u: {$ u4 {4 ^- g
#include
<iostream>
- n/ e7 \6 x9 F8 E
using namespace std;
+ B3 U% W) E& `. P( y( [5 ?
// 函数声明4 s% m5 L" x5 i0 P& Y
void output(PIP_ADAPTER_INFO pIpAdapterInfo);' @* J) E8 Q. _0 ]9 Z
// 程序入口% i6 e( @# I) w/ U9 ?
int _tmain(int argc, _TCHAR* argv[])+ ?! l" \' J2 _( h
{' C4 B0 v+ b* i5 h& K
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
" h* F, d; b- }1 `) B
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();0 L# n& [4 }0 v
   
//得到结构体大小,用于GetAdaptersInfo参数
3 ]6 A- {/ Z( r3 i0 k
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);$ Z+ ]* ]  N; d- Q: B
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
% N9 r4 \5 Z. U8 w$ ?: r
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
4 S, V2 S5 s" P9 e   
if (ERROR_BUFFER_OVERFLOW==nRel)2 {% R+ [9 H* v6 x6 `/ `; a+ ?. ]
    {- M8 \# f- n3 F, p, }
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
( }! f( y; G1 d5 ]% E    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
# z" w* l' i3 ~        
//这也是说明为什么stSize既是一个输入量也是一个输出量" s* p' f" F8 \
        
//释放原来的内存空间
( t) c; r0 {" N3 i; a3 I2 K3 N
        delete pIpAdapterInfo;, u/ c& Y# n; t% ]* |% W
        
//重新申请内存空间用来存储所有网卡信息
3 p5 ]3 r" A0 v9 O5 Y4 ~
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];) L& g3 k3 S8 e: F; Y
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量; ?  i5 G0 I" f5 q& Z
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    ; l/ C5 @4 a3 R# t" F
    }
$ h% }7 g' p3 @" ]# q4 J   
if (ERROR_SUCCESS==nRel). f/ x9 m, ~( W: m
    {/ F. k! H+ j. D, H
        
//输出网卡信息
; h* b% n/ j1 d1 z, V0 R) s
        output(pIpAdapterInfo);
8 h1 A3 z; d3 k6 s* ]    }7 Y7 O4 G& {5 Z% E7 I5 k
   
//释放内存空间0 w. e% ~. _: F  N- ]1 ?* p+ J) A
    if (pIpAdapterInfo)' p4 t% r2 w0 m
    {4 G& J6 f7 ~2 I, Z* b; L
        delete pIpAdapterInfo;
+ a8 ]& A/ m7 p2 q  L    }4 L$ H4 P: X- t; j  _4 D. i- B
    getchar();- Q8 o0 |0 z  Y6 L9 K4 f3 [
   
return 0;3 k& p, G/ i9 B# b
}
' H* o8 N& F# t6 ], ]- e7 Q4 J
///函数作用,输出网卡信息1 l- Y+ f6 A0 P3 ~1 V4 G
void output(PIP_ADAPTER_INFO pIpAdapterInfo)% {( ], {$ {2 O& P+ _9 W
{# P2 s" T( g6 m! I5 O
   
//可能有多网卡,因此通过循环去判断
3 W# Q3 w, A( `3 ~5 s4 d9 x
    while (pIpAdapterInfo)
+ L& C# K" @3 O* Y9 B    {; {" |/ R! e8 V9 R
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;/ w, n2 E5 w5 P  p$ H3 n5 O# j7 }9 ^+ N
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
3 J) e% r$ I9 b5 B+ x4 {4 u* f        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;" s" }; \/ L/ U
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
" H3 N. K) {- T  c6 Z* }        
if (i==pIpAdapterInfo->AddressLength-1)
. F- i% R6 @9 x  D        {
. B: G) B1 u& w* P% [! d( |9 u            printf(
"%02x\n", pIpAdapterInfo->Address);2 l! T7 v: f1 Z! `
        }
9 Q( ^/ m& `/ _  B2 x( I        
else
/ Q( Q1 [6 L2 l; Q        {3 j" T6 ?! U/ h7 @
            printf(
"%02x-", pIpAdapterInfo->Address);
8 I4 e6 g" M/ @7 `  b        }& C! M" Y0 I2 x) l+ Y8 E: A' w
        cout
<<"网卡IP地址如下:"<<endl;
- D6 E1 O- ]6 K0 B+ M        
//可能网卡有多IP,因此通过循环去判断
- m$ D1 G' }/ `  _, n3 W
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);2 W. x' D/ U- g6 U! Y8 l
        
do
7 v+ }$ c& i8 W3 \, c" l        {) \: q# ^0 p' ^! j) H& }
            cout
<<pIpAddrString->IpAddress.String<<endl;
/ i! r6 {' ?2 l4 W            pIpAddrString
=pIpAddrString->Next;
7 k- V3 L+ j7 c/ X/ n* s        }
while (pIpAddrString);
  D. i; Z! G: ^$ I+ e        pIpAdapterInfo
= pIpAdapterInfo->Next;
; e7 z" n3 d* ]0 b0 D* J+ e' x        cout
<<"*****************************************************"<<endl;8 ^# ]) w& P9 J+ I* b$ t
    }
$ p5 c) c) J( _4 N) U8 T   
return;
7 l4 w# O0 t$ W+ m+ s2 n3 ]}

+ J$ |, B6 z; u9 Q' z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了