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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

+ _0 M* R& Y- E3 {9 R3 x1 F' T) Y& y

( }" F2 u5 w( K0 p0 D// 头文件包含0 N/ J5 G: p* s3 D9 D5 ?# W
#include "stdafx.h") f9 P0 b# l0 K/ n! I7 Q9 H+ w
#include
<WinSock2.h>
: Y! ~2 F6 G7 I#include
<Iphlpapi.h>
$ c( e4 j/ a1 L4 I/ M#include
<iostream>
: a: W# p$ C* _- [9 `% [" ?
using namespace std;) X- u3 `  w, d- R4 m  c
// 函数声明  h. \* d* G; `9 z% B  ~+ U
void output(PIP_ADAPTER_INFO pIpAdapterInfo);+ H$ a. g" ?9 d
// 程序入口, H- W0 @! x! Y6 i
int _tmain(int argc, _TCHAR* argv[])$ a* y9 ?5 o! M6 T, o
{5 b, G9 E- X" G8 F
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息! ~, d7 G% R3 D+ Z
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();& X$ q- ?$ a% D' K  s
   
//得到结构体大小,用于GetAdaptersInfo参数
. c1 d' d' X7 i$ l0 w0 J
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);' W3 K' o6 Q9 T3 p$ O
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量* D% T2 c6 p. [& S- m
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);! g9 U$ ]& `9 f# T" `
   
if (ERROR_BUFFER_OVERFLOW==nRel)
* @2 Y! r* a0 _: M7 b( S/ j    {
& ]: C/ B7 [1 M0 S/ Z( k         
//如果函数返回的是ERROR_BUFFER_OVERFLOW6 p' n+ g' M+ S' W" d; x8 m/ c
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
' K. Z5 ]  \* O4 g# W        
//这也是说明为什么stSize既是一个输入量也是一个输出量
% M4 [& w! j- X( a        
//释放原来的内存空间% j& y4 k3 c  i4 h" l# C& Z
        delete pIpAdapterInfo;# g9 e7 O) y4 M
        
//重新申请内存空间用来存储所有网卡信息
6 T2 u0 q/ C1 ?1 K9 [
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
* B) w/ e9 r& x- d- X" f0 ?6 b4 s        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
/ Q$ m% u) u% w* j2 |
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    ( I7 n) K/ C' _+ k
    }
% a6 _+ B1 H4 t# @) [   
if (ERROR_SUCCESS==nRel)
+ q0 Y  ^, Q6 F# I  d5 Y$ n9 F7 t    {( F8 R+ ^" G; c6 \. Y/ {
        
//输出网卡信息+ z: V& A4 ]* m% M: A
        output(pIpAdapterInfo);
+ X- E! d" C8 i# W; i, V# s2 g    }
3 b; @& Z8 d1 ^* u; w   
//释放内存空间: J) x( m$ P  }& _4 S* E4 D" E' K
    if (pIpAdapterInfo)+ ^- c5 p, N* R; B1 g
    {
7 c; a( Y( Q2 ]        delete pIpAdapterInfo;
( l9 \/ k5 R$ D5 F6 S# m    }
2 R/ P5 H- Z2 ?- H) k    getchar();% j8 O0 W7 v4 \
   
return 0;
: R. u( ~# T/ n& v# R* i}; S" p: ]8 s/ J1 W: w
///函数作用,输出网卡信息( M. L* C) Q3 ]: B7 v2 {
void output(PIP_ADAPTER_INFO pIpAdapterInfo)' k9 @' g9 {: L
{# O. d5 C: ]0 v
   
//可能有多网卡,因此通过循环去判断
5 a' ^2 g9 e; n3 P% ~) @2 _
    while (pIpAdapterInfo)
1 S9 ]8 |/ y- x6 m' D: h" ?( r    {
3 j- j" v( }- N        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
' e" t! l6 [& B        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;+ J0 G; z# Z- v7 q  P) B" B8 e
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;1 l# e1 t, P* N
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++); E1 L' l; a: @% P. p: w
        
if (i==pIpAdapterInfo->AddressLength-1)& X9 y! N( c- d8 U. Q2 e" ^
        {
- Q( T) h% Q7 y( l5 i            printf(
"%02x\n", pIpAdapterInfo->Address);
% }4 Z: p4 n; Z1 T        }
# M- c2 |/ H& o. r& p! e' w1 x        
else
% ]6 x. _, w, b0 S4 z# _4 a  j! q        {
; |# Z' y7 L' Q            printf(
"%02x-", pIpAdapterInfo->Address);
! J" `$ @/ A4 U: p* J        }
" Z: ^4 C; M$ x7 h        cout
<<"网卡IP地址如下:"<<endl;
* ~8 N/ C! v( ?4 ~. n9 Q        
//可能网卡有多IP,因此通过循环去判断
$ F7 p( t' c  k/ r% ~% Y
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
) s! \; p; V8 \* i* B        
do
: ]. E4 v) M8 R. k3 ]7 {7 n) W9 a        {1 Y% L* |0 l, r0 H+ @
            cout
<<pIpAddrString->IpAddress.String<<endl;$ B; v/ Y" C  ]
            pIpAddrString
=pIpAddrString->Next;
3 W/ q! J& ?1 d) v% q% Y6 h7 M        }
while (pIpAddrString);! t4 ?6 L! T8 Z
        pIpAdapterInfo
= pIpAdapterInfo->Next;% Z; W- W2 q1 C0 U) ~4 J
        cout
<<"*****************************************************"<<endl;
6 U+ t7 R7 G2 S- P5 M    }* D# y; C8 B/ E$ ]) r
   
return;
! y5 L* b, P1 ~  l3 c3 }( j, f}

% J, a+ Z& G3 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二次开发专题模块培训报名开始啦

    我知道了