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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
) E% F7 m$ V- U# }

+ C+ r' I/ a7 o  R! J/ _
, x: ~! l/ F/ i  K// 头文件包含0 J" [" g% T. O+ B
#include "stdafx.h"# Q$ T6 h% A4 S) F" [( z( l3 e
#include
<WinSock2.h>: s4 v# y5 r# \, J; `
#include
<Iphlpapi.h>
, E. U3 C$ w. P) ~$ }- f" Z/ S#include
<iostream>
/ N! U3 c' N) S. F2 q
using namespace std;7 @: D8 z( ]; g  e% V# T
// 函数声明$ B4 q0 R* [1 z- A
void output(PIP_ADAPTER_INFO pIpAdapterInfo);! y! b! p  f  }* n/ R: a# a
// 程序入口/ d: ~' |. H: r1 I
int _tmain(int argc, _TCHAR* argv[])
/ ^" ^% j; N- k5 B{
/ L, I' f) y$ V( x   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
6 c8 f3 ?8 s9 k8 F
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();! R. d3 k& ^/ ?
   
//得到结构体大小,用于GetAdaptersInfo参数% `. `. X# p$ v+ O7 n1 N
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
( D% _3 Y4 Z) z   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
( _/ @% A6 M/ l8 f1 Q
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);: T/ K2 n1 k0 M! z" r- Y- a
   
if (ERROR_BUFFER_OVERFLOW==nRel)& ]- I/ d7 W0 w0 H& {7 ~
    {& Y3 M9 O) K' b: Y, z* U$ h
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
, Z0 Y/ C7 j& W% u2 i" y2 ~    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
8 O2 [1 y8 H& V+ m& W& d  C( p- F/ J# G        
//这也是说明为什么stSize既是一个输入量也是一个输出量1 b" a+ r# \6 |: e
        
//释放原来的内存空间1 A0 {1 [$ E& T( n; c8 u
        delete pIpAdapterInfo;
6 @$ b) A3 Z/ V- R. U6 x        
//重新申请内存空间用来存储所有网卡信息
% n" k* B2 w' Z: {: _8 @
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
4 q) y! s; B6 o2 X/ O6 h$ e        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量& Q% k( A3 g/ ~
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
$ v2 k. a7 V3 p0 q4 a, r    }9 k" @8 i" X/ {
   
if (ERROR_SUCCESS==nRel)
% F3 Q" c+ |5 T# B2 a6 u/ W9 C    {7 T3 A4 b/ U2 h% P& m+ y+ s% j
        
//输出网卡信息7 z* d. v$ E: i9 Z; _
        output(pIpAdapterInfo);- I, X1 V& ]! |* v4 v- q
    }2 }/ @' Q9 v1 H. j- A1 Y% G% {) U
   
//释放内存空间
/ M# V3 \' a. x) d, A. u
    if (pIpAdapterInfo)6 v$ K4 b( d" A& d9 [
    {6 X0 P! x, y6 n* h
        delete pIpAdapterInfo;1 ]$ s* g9 p4 Q9 U: A
    }4 k& g9 V& G7 V0 R4 a
    getchar();# z8 a: \3 c) h  C! ?* ^/ x
   
return 0;7 c7 n; z5 B! m% Q! {
}" c) F5 [3 ]) q% t6 P
///函数作用,输出网卡信息! t( f5 Z) p, [  Y/ ^0 m. ~6 h6 ^0 R
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
$ N  [6 ~) }& G1 S, m2 v6 |) z8 E{
9 @2 n9 C8 _' {8 S  o' m; v   
//可能有多网卡,因此通过循环去判断
, k7 O1 j% ]! u+ L
    while (pIpAdapterInfo)/ s9 ]# N7 k7 ^9 ]
    {
) ~: r' U/ h9 H        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;& e4 B$ O! Y7 R" Z
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
/ Q+ M) [7 Q2 q        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;6 m( p3 d# {0 N4 A" F) p' |! f
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)# P4 J# K) x! `: l
        
if (i==pIpAdapterInfo->AddressLength-1)1 D2 b" i8 x0 N+ a7 N0 S& B4 W
        {5 }8 M4 V* T2 x/ `  x; s6 n* H
            printf(
"%02x\n", pIpAdapterInfo->Address);0 r3 v, W, ?/ _. V! u; x$ h9 m
        }
) M% m& M8 a& j7 z$ O        
else
/ O8 x" b* i9 Z; K8 b        {
2 {; G0 V( z0 R  b9 S5 `1 J            printf(
"%02x-", pIpAdapterInfo->Address);
+ U. u) U7 }- B3 K0 b' ?        }
9 P# g% j4 S5 S. w        cout
<<"网卡IP地址如下:"<<endl;9 H" ~8 y% _& _  t4 e0 n
        
//可能网卡有多IP,因此通过循环去判断+ o$ A! \) Q5 g( m; P- @
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 Q4 ^& O, \, k. ]5 K* f0 z        
do 5 ?& A' _) q8 T% f& z2 f! A
        {
6 P3 n9 H, i! J" R, D            cout
<<pIpAddrString->IpAddress.String<<endl;" z+ X* |6 O' M# E9 m/ g  _
            pIpAddrString
=pIpAddrString->Next;
/ v$ q/ O7 I& F! E% a) N8 j        }
while (pIpAddrString);
# ~7 c" F' }4 u) O        pIpAdapterInfo
= pIpAdapterInfo->Next;5 R( w# X# ^6 g
        cout
<<"*****************************************************"<<endl;
3 U3 W1 P$ s8 Z" ?) [8 T    }
1 O3 H- R& H( V% ^8 |8 n   
return;
' t  s7 \' _& [5 j}

* R5 i, _2 Q7 i8 k
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了