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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
- c% Y' L3 `0 j

+ P' l) a3 t. v6 R
1 h1 b3 i7 f4 Z// 头文件包含
3 i  S, ^! ?4 C6 C4 b$ n+ v, |
#include "stdafx.h", {7 D& y0 _8 e
#include
<WinSock2.h>& I9 B( |$ u5 W! C! y0 m# a1 v! [" ~
#include
<Iphlpapi.h>, F/ k+ y9 I5 I8 c9 w& Y! G  D
#include
<iostream>, ^' S& o3 N9 _- r& X
using namespace std;
5 Z2 E* B, X" q/ b* \1 D
// 函数声明
* i' `' ^  J# R" m4 l" F
void output(PIP_ADAPTER_INFO pIpAdapterInfo);+ R# L- x3 ]7 Y$ B" z
// 程序入口
0 C( \& o0 _! i
int _tmain(int argc, _TCHAR* argv[])9 D; z) ^0 y/ |& D
{2 S9 D1 }4 Z- _+ ]* s( }
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息; _. o$ {; c# W* @0 O
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
3 e* r  o' o4 ~6 M3 n4 P   
//得到结构体大小,用于GetAdaptersInfo参数
8 @( H! w' Q4 R; A, H2 \
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);. G6 M; t1 F3 g0 S$ C1 ~6 s
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
/ \8 C* N7 z  Y0 z; d; D# Z2 ~
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
9 i& _. q2 B% y9 S   
if (ERROR_BUFFER_OVERFLOW==nRel)
  g0 ]- ]: \( K" T. n" q; M    {1 c) w# D. E. ?9 e$ E# P2 D
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW3 l. w- Z+ o) M* B, v8 a# Q$ X7 I3 q
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小& x& o. l+ y( L
        
//这也是说明为什么stSize既是一个输入量也是一个输出量3 X1 w7 M7 d/ P& E
        
//释放原来的内存空间
. t' M+ z% y0 q2 E6 N0 F' d, }
        delete pIpAdapterInfo;
2 J8 ^2 u! y0 V  J7 g) d" `0 L8 U        
//重新申请内存空间用来存储所有网卡信息0 p) A$ U2 O2 W! H* i( g+ J
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
7 S% K& E7 u; k3 c, i        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
" p* h% |5 p3 h+ w: o1 {7 c' E
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
& ]) `) h' _! d! Q2 f0 j- S    }
" L- f+ ]9 b$ N  R  k   
if (ERROR_SUCCESS==nRel)
$ j2 C! [, m9 Z! X2 }    {3 F) J% B* ]1 l: E& J- O9 V
        
//输出网卡信息' n. w, t: r- V1 U: K$ q0 v, i2 k
        output(pIpAdapterInfo);
- v1 V# \5 r/ A7 a9 Q/ E+ {' L    }
* R- T3 u. k% I# q/ t8 e   
//释放内存空间% t7 m8 q" ~# G
    if (pIpAdapterInfo)
, {6 Y% ?' r! i0 [    {
/ |9 A' p* o2 H5 D7 ~# D1 R        delete pIpAdapterInfo;
* J9 e; X! R2 R! W% H    }' m% b) Y) Q9 x( v$ i8 C
    getchar();
$ I; a, |) `% R8 ]  T% A4 O  ^   
return 0;
+ z8 C; `1 W7 J0 N# i- _- {$ m}
0 Q0 e* E5 t( ^7 f# R  U
///函数作用,输出网卡信息/ Z& B, r2 x0 F( x
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
2 p$ m; r! }0 Y6 [: b( t4 S{
' s1 q0 P, V5 D* U: v3 W& D   
//可能有多网卡,因此通过循环去判断/ j) f# Q8 k# p+ O
    while (pIpAdapterInfo)0 g: `5 l& a+ H( C4 Q: E
    {
" `# `* o# T8 m& i        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
0 V: s1 Z! B+ b, U* u3 Y        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
1 n0 {& `+ {- N9 G        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
' a$ ?+ d; j4 ]) t- w        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
0 d+ T' X5 D! `2 L! {  G) j# V1 S9 S        
if (i==pIpAdapterInfo->AddressLength-1)
- _1 r" o+ ~* g& e& {9 F# Z& ?        {
0 v# X% c0 ^/ r            printf(
"%02x\n", pIpAdapterInfo->Address);
. S* F. X% q0 {& M/ z2 R4 y        }
: ]- t8 c+ \# N; `: I( K9 l' H        
else0 g9 J7 ?/ c% I( B1 N" M
        {7 ~1 a. N9 x  `
            printf(
"%02x-", pIpAdapterInfo->Address);
5 J8 a( I9 x% j. ~6 Y3 |) I: Q        }  \, m) [  C+ N# p* a. K$ H
        cout
<<"网卡IP地址如下:"<<endl;
3 |$ ?% r2 O* J% Y        
//可能网卡有多IP,因此通过循环去判断
9 i5 T/ L. k. f0 o) |: Q% E
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);& y" \8 k$ _1 r$ `7 W( |" D
        
do & r0 [0 v- N# P! p
        {; i+ g; |. [$ u0 g/ V
            cout
<<pIpAddrString->IpAddress.String<<endl;
! ]) E2 [6 A$ r$ E            pIpAddrString
=pIpAddrString->Next;$ N  K) M; U3 h4 S
        }
while (pIpAddrString);
- M6 Q' X# b2 h        pIpAdapterInfo
= pIpAdapterInfo->Next;
5 _6 v' S% V* n. @        cout
<<"*****************************************************"<<endl;3 c+ t0 o6 x  I4 k
    }0 q) n0 N* ~: ?8 m' \0 L$ Q/ @
   
return;! n5 U9 }7 U) w/ h
}

; l7 V$ A6 `: C; |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了