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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

' F6 M' \( k- y  D5 b' G  S$ D3 U# d) ^' f/ k6 F. `
- M- r! Z- @$ \/ p
// 头文件包含
, |3 n& f( X9 Y3 c9 i, d$ L: r" E* |
#include "stdafx.h"- z: C1 }. G! m
#include
<WinSock2.h>9 C: j( {- V- X3 ]
#include
<Iphlpapi.h>* \# [8 J0 c* q! y
#include
<iostream>
+ H4 }/ f1 w4 p9 k
using namespace std;
, `4 s" Y6 L: F. w) U" y
// 函数声明
9 g# X  i! E" M) X4 f
void output(PIP_ADAPTER_INFO pIpAdapterInfo);' [2 k# `# G  u9 O4 b* ]
// 程序入口
7 ^" |. @: T: F; G
int _tmain(int argc, _TCHAR* argv[])8 N" z1 _; P- n) y! e9 {* ~" m
{+ c3 u' N7 [* E
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
0 f# `& U+ E6 P6 k- u3 e& a
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 Y5 V, K& B4 c   
//得到结构体大小,用于GetAdaptersInfo参数
- l- s& F, U( J( ~8 {! G! k
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);% P6 G) N' u& x5 j& _/ y& d
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量, k: O- I! Z! s7 a3 b! L7 q
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);5 d" p0 V# r  a
   
if (ERROR_BUFFER_OVERFLOW==nRel)
. N3 @! \* T4 \9 @4 N; y( h    {1 A+ r0 u; _1 s: a4 \
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW1 ~7 R- p8 h  s/ ?3 ~& _
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
8 J/ @& T0 F+ y) D6 _# [        
//这也是说明为什么stSize既是一个输入量也是一个输出量
+ \) x: O, Z% s* }        
//释放原来的内存空间/ D6 B5 F7 w3 H3 v% t
        delete pIpAdapterInfo;! j! O6 c) ?, N1 O; ]5 E
        
//重新申请内存空间用来存储所有网卡信息
: a) w, a, L  _+ O7 f! n5 A
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];4 t. Y9 {  v7 }  B8 f8 ^) J  \
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量  Z- L) Q6 Q# e' H$ _
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    % n# Z5 p7 P5 }* c
    }( ], ^# i& N! F) T6 r* k
   
if (ERROR_SUCCESS==nRel)$ c8 j0 Y' T" a/ y7 u
    {
$ P$ D, N9 D" W# G8 G        
//输出网卡信息
" Y* z% u, Z: S& S
        output(pIpAdapterInfo);% S* S9 P8 k- N% |5 b. Z- M( I
    }8 ]( _0 S1 z5 T5 O
   
//释放内存空间- e! a7 u9 Y. Q& |1 V: H$ T$ Y
    if (pIpAdapterInfo)
9 O& A: j2 a( \8 p/ i2 s" p    {
/ }$ B8 V- [0 Q. z% v8 p* d        delete pIpAdapterInfo;
# E( c; |& _* f0 g$ P    }5 b  @, s: @2 w
    getchar();
- @# p0 y/ S" u6 y$ x   
return 0;# O. ~9 r& n1 z! b$ M
}% p: ?' {! M0 g3 [* ?" f' k; \
///函数作用,输出网卡信息  i. Z. J& H% r. L4 k
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
% T- q: y& [, e9 B( T0 B5 F" x2 J{. F% r6 i. O8 I, o; d
   
//可能有多网卡,因此通过循环去判断
7 Q' M, Y0 [6 a9 `6 B
    while (pIpAdapterInfo)
* C+ n' g$ |6 c; W9 b4 O' n3 A    {7 N$ y& }+ G  F. m& c# Y
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
/ i+ ]4 S) i8 ?" N        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
- i5 q" v; p4 y+ a' l5 x        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;7 S' L* t. x+ ]- G) D7 G  T4 W2 H
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)) y5 e: Q$ L+ [  p, D( Z
        
if (i==pIpAdapterInfo->AddressLength-1)
, Z- B. M" [1 q/ g( E, ^7 i( j; ~        {2 O* w; ^- D! }& O& R; Q
            printf(
"%02x\n", pIpAdapterInfo->Address);
" Q! M/ L! H: o7 u  ^! H& W: N        }; D3 J$ L, Y* O- B- k
        
else& r0 F2 w8 e) E0 P
        {
0 J; o! Z% u: N5 s            printf(
"%02x-", pIpAdapterInfo->Address);1 U2 k1 l& R* P& {& o- [: \
        }
3 L# h! P, ~" L7 }3 O        cout
<<"网卡IP地址如下:"<<endl;7 M  a& R( ]5 L: a1 R  P+ ]
        
//可能网卡有多IP,因此通过循环去判断/ c; x  P1 ~* o( M2 x1 R( l
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 T( U2 N$ x- \. o) F        
do 0 r: N  n: ~6 I% M  ^* d  @& T
        {
9 K# U1 r' p+ ]" v            cout
<<pIpAddrString->IpAddress.String<<endl;
1 e7 \0 m1 ^4 H7 e! D# Y& Q# L0 k            pIpAddrString
=pIpAddrString->Next;. g* I8 T; g+ a3 C5 y, Z% k
        }
while (pIpAddrString);
/ }& r  q/ y! f+ f' T( h. \        pIpAdapterInfo
= pIpAdapterInfo->Next;3 f% L6 Q% E  R( \$ E- y1 Z) t
        cout
<<"*****************************************************"<<endl;
- t" H5 y8 W  \    }
4 O# Z" E: b7 h; ~$ j   
return;6 R: r( ~& e4 m6 ]- y/ X; w
}
& |9 `$ Y5 m$ C9 N# \9 G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了