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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82172
QQ
发表于 2017-10-11 21:24:30 | 显示全部楼层 |阅读模式

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

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

x
9 B0 d- b- O: D' W
* C2 t2 T' L5 c7 q' l0 g* N$ N

  D. P; h2 d: I" J, q; r( `9 A// 头文件包含
. u; v0 D  I6 m- ^+ _
#include "stdafx.h"+ E7 u0 s: ^: K7 l  f
#include
<WinSock2.h>
( {# h: ~  W  D. T( m0 j#include
<Iphlpapi.h>( ~+ i7 o# A! v" B
#include
<iostream>
1 j/ C+ ^. L8 y* q
using namespace std;
1 c7 G) U2 u/ }3 h4 B! v
// 函数声明
  a* q+ y4 T* j3 {/ }
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
3 m. w+ y; ?* o3 [8 q* O: c  A0 u
// 程序入口, p5 q7 q+ q  o$ E* l% x
int _tmain(int argc, _TCHAR* argv[])
4 p1 }# s) T) c# Y7 O* M0 B{
) _. {: x5 S, Q6 {   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息9 q- B1 _% w7 L$ v" L
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
+ W4 {) c. e# X9 I+ Q$ S   
//得到结构体大小,用于GetAdaptersInfo参数8 L. r/ t$ R9 `" _; E' h0 y* @( e
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);9 [: _; s  S, N$ s- E  E
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量: C, {  J0 {. ~/ R( h) j8 q5 L
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);1 H0 t, x9 I1 m. I0 V
   
if (ERROR_BUFFER_OVERFLOW==nRel)' ~, F. _7 k9 y) k$ J- r: g4 C
    {0 E& {0 m: B" G4 \6 E5 m/ E# \" t
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
; u& ^" n" w  z4 U! ?+ X; u    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
5 I7 M: {0 u9 b6 v        
//这也是说明为什么stSize既是一个输入量也是一个输出量: J4 {$ z# P. S0 J/ U
        
//释放原来的内存空间  F! r5 [9 S$ S; b: K; [
        delete pIpAdapterInfo;
7 c9 |$ P7 S+ q        
//重新申请内存空间用来存储所有网卡信息$ V3 ?$ [; [0 o# W7 W% T6 \4 @
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];: I7 x- W7 J2 c* V9 |
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
7 @: G+ C% X1 [  W% k) x4 r
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
; u( q- G2 _- T6 t9 U: N$ v    }9 \# L& k5 a0 X! W
   
if (ERROR_SUCCESS==nRel)
* y5 _* A, t1 `; ?, ~. p5 S1 a    {
9 o: p& d0 x' [9 c% q. Y        
//输出网卡信息7 L. V/ \. s; I- V$ V6 R
        output(pIpAdapterInfo);
0 q; x: o$ p& T5 q4 i    }! T! J3 R, w% O  L7 L, S
   
//释放内存空间& e9 g0 ^; U) v6 I
    if (pIpAdapterInfo), ~- |- I% c: A4 t* \1 H
    {5 q2 S" b) N3 W3 n: [7 T
        delete pIpAdapterInfo;
5 }! y3 Z1 ?! G    }
1 Z7 q( v! z) l$ H6 c$ q# ?8 h3 v    getchar();( r7 l7 ?, j7 `" a' H  x+ ~
   
return 0;+ v) D0 ]& s6 A1 O; z$ i
}
' E5 ^8 y. }: Y4 n0 o2 W
///函数作用,输出网卡信息; p/ }* k- `7 B; T
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
* l$ R: ?$ E& f! A% q{4 u4 Q6 t3 }/ n: G0 g
   
//可能有多网卡,因此通过循环去判断+ w  J5 p- x" K
    while (pIpAdapterInfo)
, y" [5 z) E, s6 s; t    {
  L5 `+ A3 o& l! J, k' Q        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
7 A5 M4 x' n9 b8 I- m9 u        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;% {; e- @8 i9 y
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;# E; m$ ]( {1 g+ s6 `! Q. N
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
; T- W2 M% r% d/ i        
if (i==pIpAdapterInfo->AddressLength-1)$ P9 f0 J2 Z: d
        {9 I9 _( w& [  G, Y& s
            printf(
"%02x\n", pIpAdapterInfo->Address);& o- V9 H5 b* }. p/ d: [8 s
        }
  s9 D& I6 f1 v8 C8 f+ ^0 R        
else
/ H- ?# |1 L+ ~2 [, \        {
8 N% V/ h# \. V% P- \            printf(
"%02x-", pIpAdapterInfo->Address);/ D. }( B5 W; B- I# F+ R  `# }6 `
        }- v/ Z4 C( O- u# J5 w6 {, r
        cout
<<"网卡IP地址如下:"<<endl;
" w1 f8 k% o; X- `: R) I        
//可能网卡有多IP,因此通过循环去判断( S8 n0 v4 h! V4 Z0 i( b+ |, @
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);+ ~- {: s2 E# h& _
        
do
! P- E4 |' i* U% i5 h9 i        {% u2 P8 b2 X% K" R2 J& y
            cout
<<pIpAddrString->IpAddress.String<<endl;  C6 x9 |7 _$ p; G( M/ Q, u
            pIpAddrString
=pIpAddrString->Next;  g8 t4 B9 k' o( `: _' u" @
        }
while (pIpAddrString);
, T/ I: j( v; R. C+ h! d        pIpAdapterInfo
= pIpAdapterInfo->Next;
( z& O2 @) |4 o+ t4 V        cout
<<"*****************************************************"<<endl;  A3 `* y' X1 ?8 n5 _
    }
/ h7 Q# `( v- \; f2 `1 K   
return;5 K4 k+ V3 l/ @
}
7 T7 P; U  E+ i6 h* S9 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二次开发专题模块培训报名开始啦

    我知道了