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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
/ h8 a6 Y  n/ B3 T

4 d* d% L" p  b2 w/ U! k  P  u! h% c. v7 I, a# v/ J
// 头文件包含( I9 R/ K: z! C
#include "stdafx.h". p- t/ d+ ], ]4 O4 t: x
#include
<WinSock2.h>% M8 P& X- w- b* W4 d5 v
#include
<Iphlpapi.h># C6 D; o: b' S( F+ y6 t8 ~
#include
<iostream>" [0 p! E( E3 Z
using namespace std;
% F+ Y2 h7 A- P
// 函数声明
6 Y# u( H: B/ c( e, j" ?
void output(PIP_ADAPTER_INFO pIpAdapterInfo);( A  j4 D, |" E( o
// 程序入口& P+ _+ Y$ P/ N" E* b; _
int _tmain(int argc, _TCHAR* argv[])
1 C) Z# I" l7 O{5 q+ w: A; `- \( Z4 K' l
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
% K. F- H. l# f; o
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
' a8 C; l0 E3 ?3 k3 L/ x   
//得到结构体大小,用于GetAdaptersInfo参数& ?  F$ g5 `1 y. ]# \! O
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);& r% p& B9 A* ?- f: Z
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量6 e* ^  Z$ x1 o. z" x3 c
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
& Y0 p; z# L" v  q5 x# h2 }   
if (ERROR_BUFFER_OVERFLOW==nRel)( m' l$ K* u, }' Z* x
    {9 e/ i. V( I7 p7 F
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW& C9 n) M) \$ r
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
" K2 [# D# a: ?        
//这也是说明为什么stSize既是一个输入量也是一个输出量+ }. S6 Z. e5 O! x1 I: Q
        
//释放原来的内存空间
- s0 L# u6 X6 m1 G2 o9 R. E
        delete pIpAdapterInfo;
  r# S- Z5 y) `. q. _        
//重新申请内存空间用来存储所有网卡信息3 V0 Y+ }+ J$ u! j1 H: h- V
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
  `4 A) y# ^' ~  o! P  v        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量( s6 V0 W; F' t- l. O# w6 m2 k: L
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
+ w! C. G9 E" A+ p# O" b& h    }
) m# d* O8 g7 r: ^) Y   
if (ERROR_SUCCESS==nRel)
! [( q: r  i9 w% M+ c    {' |8 n# }7 P( A- O$ Y( Y
        
//输出网卡信息. e' a8 }% A4 h" a
        output(pIpAdapterInfo);) M" ^% N# n# _3 n; P+ H! G# p- t
    }( |) B: ?8 k; c! Y# P% T
   
//释放内存空间
4 f: ^3 g! I( S0 I
    if (pIpAdapterInfo)
' j$ `# R; X4 i+ z# F    {
2 c, n. q7 g! a- I        delete pIpAdapterInfo;
, y. e$ p' I/ j! `3 z    }
. F, d8 o. @  V6 V: l- e    getchar();3 [! C# m' p+ r% r  m
   
return 0;# r* P$ X1 g" F7 n
}/ T) x, e7 ^7 f
///函数作用,输出网卡信息/ g3 F/ D/ S5 P' G' z
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
4 A3 ?  c& i: B/ p9 _/ s{. v. k. [4 o5 c: D) h# r+ b
   
//可能有多网卡,因此通过循环去判断
: E/ Z1 K3 o. [# t1 P
    while (pIpAdapterInfo)
/ g8 @+ i( Q: p. L5 v    {! }% [7 _; A4 [4 b; \
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;  x& ]- X; Q0 t6 E
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
) x$ U( t7 a5 a& K  _  G        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
7 c, E& g9 R, H- a' d" \        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
( D+ w) s6 w0 }7 u        
if (i==pIpAdapterInfo->AddressLength-1)
! _2 E5 C5 _' L$ u" Q        {
6 W5 }( p/ n/ I# `1 M            printf(
"%02x\n", pIpAdapterInfo->Address);8 X) R# K' j  [/ l
        }
7 ]3 z7 f1 h+ W        
else, J2 M' n" F* c/ y
        {% g5 c: D3 k. i' b1 y; L7 _. t
            printf(
"%02x-", pIpAdapterInfo->Address);. k5 I8 m  P  F
        }$ M1 z: W' A/ ]- [6 g( Z
        cout
<<"网卡IP地址如下:"<<endl;
9 l$ H* h3 N  Q/ Z, v7 Q        
//可能网卡有多IP,因此通过循环去判断
+ a! p; B4 _8 X6 P  R! l
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
& p1 c) {7 w- d2 p! X0 P* P        
do
" Y/ R. K" D5 u/ K. P        {' `5 ^4 f% Z, K+ U
            cout
<<pIpAddrString->IpAddress.String<<endl;
! f8 h" e& y+ U0 l% l            pIpAddrString
=pIpAddrString->Next;
2 Z; m. f( @2 G8 j  ^        }
while (pIpAddrString);
' G; z3 y/ d& p; \        pIpAdapterInfo
= pIpAdapterInfo->Next;
2 z- i( v$ g( D/ {        cout
<<"*****************************************************"<<endl;2 X4 z6 I+ {* u6 c
    }
: ^' n+ W  G2 f+ p   
return;
8 U( ]7 g! n, |+ C# R}
% Y( n; a3 h! F& ^- R0 t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了