PLM之家PLMHome-工业软件与AI结合践行者

[转载电子书] 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

% s& w- b+ e! e% O
% F- j# A6 ^7 q0 X2 Y. F
# |  |: d7 d& n% e5 H( O4 q// 头文件包含3 Y: Q  Z7 l  {; L
#include "stdafx.h"
  V& N" \# p1 s/ G# Q#include
<WinSock2.h>9 S( `8 r: j* D: M" [, l0 x
#include
<Iphlpapi.h>0 R0 C; [: D) p
#include
<iostream>6 s* n% K* p( I3 ~
using namespace std;
& B( H. k: q  o9 f
// 函数声明
8 g# k7 n9 C' x& a: M# ^% Y
void output(PIP_ADAPTER_INFO pIpAdapterInfo);( U/ m4 H. D8 c0 l
// 程序入口5 H; e. ], k! w5 W& w9 e4 }
int _tmain(int argc, _TCHAR* argv[])% i! E) O1 m2 i4 _4 x
{8 M/ a, {! e* i8 p, T
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
/ r! c$ [1 r; o+ i  N5 ?
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();9 x* L4 K8 d& a/ `  Q: {( E0 l
   
//得到结构体大小,用于GetAdaptersInfo参数
; P( B) s4 K' x" j4 G5 o/ f
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
% Y& F5 n$ Q0 |0 e% G3 ?1 R3 X5 d( u3 P   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
' v# S& y& F3 J( k  S: r. b) `
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);, l6 d& o6 B+ M2 Z6 o$ ]' W
   
if (ERROR_BUFFER_OVERFLOW==nRel)
. @' A4 L8 [  p" k    {
9 R% H  P/ n" N/ ?         
//如果函数返回的是ERROR_BUFFER_OVERFLOW0 ]! N: Z% \3 t: X! D
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小5 G5 c) ^# ^. D! r0 p7 L
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
& ~3 ~9 ]) X/ `4 \/ I        
//释放原来的内存空间
9 g# c) r- Y, Y" u& ?$ v
        delete pIpAdapterInfo;
, O7 K) b0 S  c        
//重新申请内存空间用来存储所有网卡信息# ^- ^& e! {! \' {3 J
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];# V4 E5 s+ _( M1 F* b3 v
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
* I2 h8 p, h8 l2 ?4 [
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
9 }; U6 F% o1 @) e/ h    }
) s; D) m4 d6 F7 X( \   
if (ERROR_SUCCESS==nRel)
, a! s' c. {! X7 I* n- |1 d6 {    {' w, i$ v6 Z3 w' V1 d% W3 x' k$ U, X
        
//输出网卡信息6 v2 r1 t# K/ k" F( i, s; _1 X0 q  x
        output(pIpAdapterInfo);
* e3 G1 S7 W0 R7 B5 _, h# g8 X    }
+ \  J: z0 ?2 ~7 V( A; Q   
//释放内存空间: |6 e( y/ l( r, {8 n- W
    if (pIpAdapterInfo)
+ j' X9 `9 a9 ?5 }: }0 V) @    {' i" F+ \: v# o8 t3 R6 b8 E
        delete pIpAdapterInfo;
% O4 z/ j: }0 y" G# G: M5 _; G( E    }5 a4 C% H! E% e* ]( I: ?8 r& U- d: O
    getchar();. Y. G# C) T: ^6 [2 H1 j/ g
   
return 0;5 ?' ]2 Z& u& v! [, A
}; Z! m4 h, Y" Z8 }
///函数作用,输出网卡信息
0 Z  Y4 y: N, |! D
void output(PIP_ADAPTER_INFO pIpAdapterInfo)1 q3 E/ p( V  p% K% E3 s
{! e+ h& {1 R0 |& i8 c3 g) T
   
//可能有多网卡,因此通过循环去判断2 I/ d" {% w2 T5 Z, `) ]
    while (pIpAdapterInfo)
' p3 d$ [) e' K# Q8 k    {
0 X  n" d9 L% _) l. L7 z        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;% H- p9 R4 Y( w6 M# Y8 b
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
/ F9 \8 ?: t4 F& ^        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
! R4 D8 `1 t, c        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
) ~; F" @! Y. i6 ], J3 T        
if (i==pIpAdapterInfo->AddressLength-1)  g1 O$ O  _8 u* n2 V0 k+ P9 t: Z
        {
' {6 a% m+ j$ n; {            printf(
"%02x\n", pIpAdapterInfo->Address);1 v" y6 G+ R$ U+ G% n
        }3 o" x( ~' }0 h1 j$ c* a
        
else
& G2 H' U7 b& t% x" v        {
5 b9 _' p; o/ Z            printf(
"%02x-", pIpAdapterInfo->Address);( h9 D& y- `. [: I+ W
        }( {0 v) k2 a! j3 r
        cout
<<"网卡IP地址如下:"<<endl;
& \5 y5 B+ u/ A6 _        
//可能网卡有多IP,因此通过循环去判断: J9 t" G! M0 E0 X: M4 \) S
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
: K4 z7 G. |: e* E) j) E        
do ' B  x# {$ N( D6 ?
        {2 g7 `; H- ~' a
            cout
<<pIpAddrString->IpAddress.String<<endl;2 V* E) w9 V& t# v
            pIpAddrString
=pIpAddrString->Next;+ D$ Z# `0 ~# B
        }
while (pIpAddrString);$ `+ e/ q. k  \4 G0 u
        pIpAdapterInfo
= pIpAdapterInfo->Next;
( ]1 }; t6 X  I# W0 g3 `. C        cout
<<"*****************************************************"<<endl;
! S' V& s7 N' F  B& }7 `    }4 D$ p( J' ~: @% s  S# X  x
   
return;
; E; B* N6 G  f. R* m: {4 {# O6 Q}

3 n* d4 s2 j; e( }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了