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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

; m& H  R. {7 m5 w, p% S( e! _: Y, r' S; X8 s

: K1 _4 F9 [3 \4 c( v% I// 头文件包含& H$ Q" [, K  w+ e1 |5 J& r, C
#include "stdafx.h"
; Y( F: x3 P/ ]+ h#include
<WinSock2.h>1 p* A/ @0 L- [4 f9 N: L% ]
#include
<Iphlpapi.h>
9 o( j. h- A. X9 f#include
<iostream>
, c9 {4 B3 j5 r  R# v
using namespace std;
" ~4 B$ c1 }9 j% E7 b
// 函数声明. ^# K- J+ _* Y1 r& [* t( Q9 d
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
; n' `' k8 p( j
// 程序入口
* j  V! m1 ]$ [1 J% k
int _tmain(int argc, _TCHAR* argv[])
9 T+ q+ P, k' m' T3 h; c( l) R$ J8 B+ s{
4 B, d! |4 I2 i' a4 [   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息, S9 L& g7 I7 ~$ Q0 U  V
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();) q/ C) x4 D' n8 I6 D
   
//得到结构体大小,用于GetAdaptersInfo参数
1 m- [5 f- E1 E( o7 U# ?' l
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);' G) |$ n+ O. i" O. A7 Z5 ^
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量$ d: H# e7 f' u0 G
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
! Q$ w$ ~& j5 o! [1 b6 g   
if (ERROR_BUFFER_OVERFLOW==nRel)
' Y: _3 n1 W% C: u; E& b    {& G! v0 {9 o  e7 v3 A$ L  F, V& V
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
+ n1 I7 L4 q: w( Z    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
  o( `) Y5 C) i7 L  Y& ^& N        
//这也是说明为什么stSize既是一个输入量也是一个输出量& ^$ V4 i1 b% A1 R# a# ]' ]
        
//释放原来的内存空间8 f6 t( R% D. y$ M, k# j7 J
        delete pIpAdapterInfo;
9 @& v" {$ d9 T# E$ l        
//重新申请内存空间用来存储所有网卡信息
" L( W: o7 p5 B6 ~
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
: l+ l7 H) X# {8 O        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
+ K  U7 d. ]% a2 f9 b3 s
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    $ L1 D  h- r5 Y8 [) u4 M) K8 G
    }
3 X$ R' x: v" [/ z5 c/ s% M2 |   
if (ERROR_SUCCESS==nRel)
# ?: @- x" ~  A7 G- W1 `2 b    {8 L1 R2 `; ^% l
        
//输出网卡信息7 \' ?3 y" K6 L: e
        output(pIpAdapterInfo);; d4 @5 m# s0 ~5 l6 X% a1 F
    }
- {+ u0 @# `  _   
//释放内存空间* I6 o6 i4 m! Z: ~# \" k% e
    if (pIpAdapterInfo)/ b* K/ v0 F0 Y: A
    {5 D5 d% _0 N1 z  H1 X4 n# _
        delete pIpAdapterInfo;7 ?7 F: Z- }9 F5 p( g/ U4 m4 ~/ d
    }; J+ X/ w% I, W' V
    getchar();) T( J5 A) I. ~( M: }
   
return 0;! O$ H& I  c% V5 U& \% |
}, W! M2 i/ a2 u# m) |) k- ~* T
///函数作用,输出网卡信息% b' i! b9 |! a% K/ p1 y
void output(PIP_ADAPTER_INFO pIpAdapterInfo)1 f6 r7 w* @+ A: L# }8 s: v
{
: D5 w- _  Z" x4 M% r( [* q/ F   
//可能有多网卡,因此通过循环去判断' V9 k* j$ v$ |  B) {
    while (pIpAdapterInfo)$ `# D4 D1 s; ]# H  F2 m
    {6 n5 d, L; W$ q- t
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
0 E) A/ s1 z6 W; y! Q. w3 L2 q! t        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;/ ^, t; U! D3 r
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;; y# v& a: a8 W9 ]7 z
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)( {% _) ~! C( h; e/ L8 _
        
if (i==pIpAdapterInfo->AddressLength-1)
# v4 y/ w1 w9 p        {
: k/ L. i$ L! H( y            printf(
"%02x\n", pIpAdapterInfo->Address);+ \8 ]0 T/ U1 a4 ?
        }
2 j9 G8 x; f! Z: T' f        
else1 B8 e" e9 ^: R: w* K; z2 D. `4 V
        {+ |. X0 g# b% a0 v( p
            printf(
"%02x-", pIpAdapterInfo->Address);/ ~0 t. K( P" c
        }
( s# m  E' I2 y! p3 W        cout
<<"网卡IP地址如下:"<<endl;9 @- _) K  i0 p3 l6 @" n2 V8 h
        
//可能网卡有多IP,因此通过循环去判断
  c) t- I9 @; M. y5 O
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);( a" r" {& c1 h8 G0 h
        
do 3 U' F6 c) Y$ f
        {! G' U- P& N5 _  s
            cout
<<pIpAddrString->IpAddress.String<<endl;
$ E4 c- b; X& |! u* A. a! R3 j            pIpAddrString
=pIpAddrString->Next;6 S0 S- {/ @0 Q* M9 z! N0 x* k
        }
while (pIpAddrString);3 \& l/ C$ m/ N2 K* q
        pIpAdapterInfo
= pIpAdapterInfo->Next;
/ Q+ ~& P$ f  E& i) ]5 A        cout
<<"*****************************************************"<<endl;
" A! }1 P" f; d! G4 \2 g+ w+ y    }
! m$ D4 T  m" n! a   
return;# X6 \* j: j0 D' s% T. Y
}

; f7 p+ x9 w  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二次开发专题模块培训报名开始啦

    我知道了