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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
  P5 V/ q6 j: k' V  f
/ Y3 D4 ?. v8 ?1 z6 f$ R  B
4 Z5 ]7 E% J; B5 D! k
// 头文件包含
5 l! a. ]" i" w4 H
#include "stdafx.h"! }1 s% \$ ]2 L1 d* t' O: M' N
#include
<WinSock2.h>
- S8 X. Z& g+ c: N+ C7 H% w#include
<Iphlpapi.h>
6 N- c) q/ h0 `4 s% w#include
<iostream>  r6 [; ?' `- T1 h. N* T2 N, n
using namespace std;
- ?: l/ Z8 R: T7 _
// 函数声明8 Y8 w" T% z0 l' n% |
void output(PIP_ADAPTER_INFO pIpAdapterInfo);- M# e/ j, f! U
// 程序入口
& `2 d- W# D5 O% S1 I: G. `
int _tmain(int argc, _TCHAR* argv[])
2 l$ n5 d: Y1 b0 `{% o& ?- U+ ?8 J  k5 h% r8 w
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
, U4 `# q* p% o' X
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
2 [& M+ Y! Q( X   
//得到结构体大小,用于GetAdaptersInfo参数
" e1 ]0 H, J1 q0 t
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);8 W8 F3 ^' D7 o- S. b; Y( a
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量( `  b5 z/ _2 ~3 J5 s0 A
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
$ b. F9 O9 C2 u, T6 g% f1 G- {   
if (ERROR_BUFFER_OVERFLOW==nRel)$ m1 _9 B; z7 q3 a
    {
) ]: G5 ^! K# t' C/ v2 }         
//如果函数返回的是ERROR_BUFFER_OVERFLOW' ]9 }* F+ f0 J
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
3 j* |# o3 k# K- Q$ N        
//这也是说明为什么stSize既是一个输入量也是一个输出量
- o4 m4 Y) F# B0 V        
//释放原来的内存空间
1 h2 W% |4 h$ j- Z  s' f" y
        delete pIpAdapterInfo;
: |" [! {7 |2 F( t+ n3 _/ b; o- b6 R        
//重新申请内存空间用来存储所有网卡信息
7 ]9 [9 C, S) J; F! P
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];* H+ _; s+ k$ q* J
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
8 e7 D- U- z( x6 T* o
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
/ j# }0 b( |$ ]+ y' j    }  }# N, C0 W, P5 F
   
if (ERROR_SUCCESS==nRel)
/ O6 g7 b6 i6 i+ p    {
; Z8 }+ h* M8 N        
//输出网卡信息# E5 g- l( n! I, R) g; R2 \
        output(pIpAdapterInfo);
: A; F. o' ^, A) c8 [/ O+ I1 {. Z    }
8 ^' [- r/ w0 V   
//释放内存空间
2 l8 P# a' k+ E! d$ _1 k
    if (pIpAdapterInfo)- j$ Y8 M+ Z  d
    {" r% X6 Y7 ]% y" f1 a, ?% j/ H
        delete pIpAdapterInfo;# d" m% Z/ t# w/ ]) R% u+ h, }- O5 x
    }% l8 D" N4 l8 s+ J/ ?0 J3 p  y
    getchar();1 m6 o8 S. q; `/ v/ p& x- g4 J
   
return 0;
. [# h, x+ e+ z; t9 l}* \7 V/ ?1 {1 c2 X$ `) Z
///函数作用,输出网卡信息. k. I, `. o! e  Z8 M" Z9 _" n1 \
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
% O6 X9 f0 Q* f* |1 r* ^$ n{
# _+ F+ K  g- x8 f+ r5 O+ y   
//可能有多网卡,因此通过循环去判断
3 C/ d% C% D* e% H# e
    while (pIpAdapterInfo)
7 a5 G+ t/ j2 d( \. N    {
& H* ^3 ~: O7 \, x' n        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;$ |, V  f& D( Y/ Z0 N
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
% T; s2 w8 H! a& D. o9 N        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
6 F9 T" i+ U/ T2 i7 m/ B& S; x        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++), A" D6 T6 J5 M1 _# w1 Z
        
if (i==pIpAdapterInfo->AddressLength-1)$ `! Y5 F, n+ i
        {- L" r' o) d4 y9 A
            printf(
"%02x\n", pIpAdapterInfo->Address);+ s9 V1 O( ~  Q; S/ z
        }9 E% F8 q' s/ \7 L5 o
        
else
# a. R6 R# f9 \& i/ _# f        {1 I7 D+ `/ g- V/ t/ M
            printf(
"%02x-", pIpAdapterInfo->Address);7 g3 Z) @6 [" Z/ p, V$ h# Y: O
        }" \' a; S- ]9 j0 [/ ^5 H
        cout
<<"网卡IP地址如下:"<<endl;
$ \' v) F/ ?' K7 A        
//可能网卡有多IP,因此通过循环去判断) J0 P, T2 v% @! a; c
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
& R" O! p/ Q. k3 P: e) }" y        
do - b& ~3 Y6 w  G( \) C
        {4 g/ M9 O9 C) |6 E: ^3 O* @6 V) c2 T
            cout
<<pIpAddrString->IpAddress.String<<endl;
! V  J+ o9 w1 _            pIpAddrString
=pIpAddrString->Next;
  {% f* y# n/ d/ @        }
while (pIpAddrString);* C+ j3 v; s/ y5 L$ P6 |9 w
        pIpAdapterInfo
= pIpAdapterInfo->Next;) [4 \$ o8 m/ ]8 m# I
        cout
<<"*****************************************************"<<endl;) c. n5 I$ d0 L/ b  [5 ?
    }
: N: E# |; w4 L; T0 y% z% F7 [( ]/ ~   
return;
) u% o; O9 N3 i, C+ r) @4 Y/ i}
' u& B' Y1 E) O. ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了