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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

  O, b& w8 Z# [; U* {- ?. T( t3 ~$ X; Z+ N8 X' K* S) [4 a

; }  H" Y% T, \% _// 头文件包含9 b1 l# {* H9 m$ |% Y. O
#include "stdafx.h"& w7 n6 m+ B" \. V) T* g# N% W  B
#include
<WinSock2.h>8 d8 k6 K& i1 L9 E# Z$ d- C
#include
<Iphlpapi.h>
1 x5 _# z' @9 C* V; S4 j4 G( a#include
<iostream>& q7 f% d$ ~' {6 f0 F1 h
using namespace std;
& P$ X8 d* w( ~* f
// 函数声明" t6 C# H5 b% P4 G
void output(PIP_ADAPTER_INFO pIpAdapterInfo);+ Z  x% @& o/ e  r/ x( L
// 程序入口
7 Q$ e0 e4 g( w' N
int _tmain(int argc, _TCHAR* argv[])
9 h2 _! P6 D8 [5 G{
; O0 H! b' ^7 B# _0 u, C6 |: ^   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
1 ^9 w6 m- \4 m( n
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
0 X2 S- Y/ A+ r2 J3 U$ y- z   
//得到结构体大小,用于GetAdaptersInfo参数
& ?& z) ^5 [/ H, E9 a( ~& R
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);7 c- K: a1 A4 C
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
. @% z8 f' I% R% O/ Z) l
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
: N- P; O' O; p- x1 t" T   
if (ERROR_BUFFER_OVERFLOW==nRel)# l2 Q& }; F, ~  V$ j/ l
    {
2 ?; |" a" g0 u7 h4 U         
//如果函数返回的是ERROR_BUFFER_OVERFLOW1 N" }+ r- L$ U0 }6 i, M
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
, E8 L( ]& ~- y" K+ c+ H- d        
//这也是说明为什么stSize既是一个输入量也是一个输出量8 e) W& y& v, e; q( w+ N( m
        
//释放原来的内存空间3 o4 z8 \; x2 Y! \# l. _1 G
        delete pIpAdapterInfo;5 f4 @1 {' I0 @; T
        
//重新申请内存空间用来存储所有网卡信息: H+ y; @% X% M6 v5 L3 l
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
9 v7 L& F- p% U        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
8 F  {4 x4 \" Y9 v2 T: I+ ^
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    , ~- u! E6 c+ y  I& a; m. p
    }
# P# L$ C/ S( T6 ^; c   
if (ERROR_SUCCESS==nRel)
3 X$ j8 h, y/ M- l$ o    {
  c0 M& d( v6 E/ M9 Z        
//输出网卡信息. G5 ?0 j9 O" @0 A* _) X
        output(pIpAdapterInfo);" Z$ p% Q$ W1 |- k6 @9 S+ U# a7 B6 G
    }
; E. b  s7 @) }: \   
//释放内存空间
3 A7 w) i: g$ c
    if (pIpAdapterInfo)- t. i4 Z. t; [: R8 S
    {
2 G1 n' i$ a" n# I: \# H: P        delete pIpAdapterInfo;5 z1 }2 J! n2 s: Y1 Z1 o: A
    }
( B! U' e. S: J    getchar();* j) Z: l0 l6 l3 `: g, A8 S
   
return 0;+ h6 p* E( _6 ?
}
9 U& d9 I/ q$ z9 j  n0 `3 L
///函数作用,输出网卡信息# {& F( n6 x% p& F. B6 U# v  S
void output(PIP_ADAPTER_INFO pIpAdapterInfo), T) ^& }' f4 n; c& G
{4 V8 ~3 ]' n7 q# V
   
//可能有多网卡,因此通过循环去判断
% d9 s: ]2 i0 A$ @9 C7 {
    while (pIpAdapterInfo)9 e5 @/ N% D; D9 w
    {
" W: c& Z$ e! W: C        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;% K5 h$ O7 \. o1 R
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
( E4 f7 l' }4 ~) h6 v        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
+ B6 e9 p. U7 ]+ \        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)0 Z" T$ [% M& k7 G* j% a/ x  D
        
if (i==pIpAdapterInfo->AddressLength-1)
& m0 e3 b8 _% j2 n        {
5 E7 `0 x# b6 O' M  V            printf(
"%02x\n", pIpAdapterInfo->Address);
! H: Z2 f2 j7 M# g        }
2 A2 o$ \* @% d        
else
# W6 z$ p1 B* y0 Y: T        {
; O, W$ }$ v/ L            printf(
"%02x-", pIpAdapterInfo->Address);8 }0 P4 n) p# ?8 l# @+ n
        }! X7 L/ I0 a/ _6 c6 ^; _
        cout
<<"网卡IP地址如下:"<<endl;2 P3 f% y7 `" `  w8 i5 P
        
//可能网卡有多IP,因此通过循环去判断
4 d% `9 g* L( [" }- s* `
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
4 z: d. u/ y" w2 x3 I% n1 O4 x( H        
do
' z. n6 A: x3 {" Z        {
8 t2 H6 Q" t5 y1 b) P( {            cout
<<pIpAddrString->IpAddress.String<<endl;& A8 W, |" O6 U8 j7 ]( [7 C# B7 v
            pIpAddrString
=pIpAddrString->Next;6 W) w* V4 v# Y4 a0 ~
        }
while (pIpAddrString);
5 G' K* q5 ]/ w/ H: T6 r        pIpAdapterInfo
= pIpAdapterInfo->Next;
7 p: R& P( l- c' o& X6 P( Z. |5 v        cout
<<"*****************************************************"<<endl;
6 h1 p" k3 Z8 d3 y( v    }
( ]$ I! z" I1 @0 f% U- v* H, E   
return;! I- o" ^1 s2 F9 B# @2 ^
}
% H8 j" D" g1 h/ [* l" c7 y2 F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了