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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
( f( X8 l7 v$ ~% E+ u( X

1 A6 f/ l7 C6 N* q
, _$ B5 n5 g: I( j+ s% C// 头文件包含( w8 z& Y2 T1 G3 P; W( l
#include "stdafx.h"
1 Q" Y* F: G$ Q#include
<WinSock2.h>
$ |7 x0 L2 E4 d$ q9 J#include
<Iphlpapi.h>  ~6 k) o' q+ G; N3 C9 h
#include
<iostream>  E/ M7 Q$ O; h9 o( R
using namespace std;
- e2 H/ z: F; z
// 函数声明
9 |3 g9 y* v8 o5 l: ^
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
# B- M3 @1 }; c
// 程序入口$ V( s- b) C) C( ]4 R) A9 U
int _tmain(int argc, _TCHAR* argv[])1 S) _7 R! a3 [, e6 e/ F
{
/ l) J7 b; ]" |1 E0 d- Z   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
* B: E# [' ~2 y9 v# O- {' u
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();8 f) y- [) K/ {7 L8 R. A7 |7 E& R
   
//得到结构体大小,用于GetAdaptersInfo参数3 K6 `& ^6 R- i+ V
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);! R8 U  B6 l# T1 Z4 b2 u
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
& g& U* ^2 ^. O. F% [2 V  [
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);- G: L6 z; r3 {, W
   
if (ERROR_BUFFER_OVERFLOW==nRel)! f, t, f* A- o4 N7 K1 p: D
    {
& q; c/ {7 v- v; o8 P' ]         
//如果函数返回的是ERROR_BUFFER_OVERFLOW- k- U" I% q( V' F8 c- C& p' @+ ~5 D
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
+ P3 S( a1 l2 X- @        
//这也是说明为什么stSize既是一个输入量也是一个输出量# ^4 I  F$ R4 O' e/ ^
        
//释放原来的内存空间1 a4 _6 F* B- @0 B: Q3 [1 k
        delete pIpAdapterInfo;& w5 A/ j0 B& W3 l
        
//重新申请内存空间用来存储所有网卡信息7 c0 b: T+ m5 r( j* G( L
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
" x: }  d4 b) ^4 N$ p        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量1 V2 B8 T$ ?, l
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
% D) J7 F! ^) J# I) j; f: x/ B    }$ `3 N3 Z: p1 b% l+ h3 d
   
if (ERROR_SUCCESS==nRel)' ?+ V1 |8 w0 Z, W
    {
. [$ X5 d* h! b        
//输出网卡信息
0 d" `6 N; }0 j! o% a5 A
        output(pIpAdapterInfo);$ H; b8 W/ ?5 Z1 b' }9 V
    }
% g! q6 p$ j5 o+ i7 `   
//释放内存空间
: v, L5 I: L  @4 s; w
    if (pIpAdapterInfo)
, y- j1 `5 R" m2 G8 g    {5 U: m, A* R* x4 X7 |# a9 c5 J
        delete pIpAdapterInfo;
) Y6 v& n# m: d( @# ~0 s    }. u" V$ `. V3 s/ n* R9 C
    getchar();
* ^1 Y6 t* c+ u( _4 o6 F, S   
return 0;1 Z7 T3 y+ a* H% e& H1 A
}
% m6 S# P+ {) N& l$ s5 M1 d
///函数作用,输出网卡信息: ^/ p$ l% @$ u2 `
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
# ?* D. R" }3 N( B+ u{
: ]( [" E+ b3 z* I  I   
//可能有多网卡,因此通过循环去判断
; l( G! |; Y  G# N& Q
    while (pIpAdapterInfo)" v# v5 s( J: `* [/ T9 B! d7 s
    {
* M  n* h: \9 R( e% J, F' x0 }        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
+ R9 y4 S5 c  L# [        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
- ^* a# p2 T' _1 V2 E: @        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;0 f  X$ \1 a8 ^. P
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++). z7 c" x& V1 v1 O
        
if (i==pIpAdapterInfo->AddressLength-1)
' s* a1 M; y) L) D/ U- U) B        {
2 d  T2 {5 W6 ~- [! S            printf(
"%02x\n", pIpAdapterInfo->Address);
% J: G, j$ z' P7 D4 o' `% s$ M: [        }
8 x1 C# q& W7 g7 X1 ]0 r        
else: L: Y1 \) S) {$ |3 h/ [
        {% @5 a) u' }. F
            printf(
"%02x-", pIpAdapterInfo->Address);
6 M# a; |3 `; z; K        }" U* H+ N& I* M8 m8 |
        cout
<<"网卡IP地址如下:"<<endl;* f0 s6 G5 X: R
        
//可能网卡有多IP,因此通过循环去判断
# F- f7 c0 |, @* r, e8 |0 a# a0 }. k
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);3 P7 ?* S8 C* Z( p
        
do   s& X9 R. _! i# x( |
        {. I! T# N6 c4 \
            cout
<<pIpAddrString->IpAddress.String<<endl;9 V# Q7 E" V: K
            pIpAddrString
=pIpAddrString->Next;- a: d- |& m! w1 K' y, k
        }
while (pIpAddrString);& B+ C6 U6 Q$ \0 F
        pIpAdapterInfo
= pIpAdapterInfo->Next;: W* N: z- g7 p2 a9 I
        cout
<<"*****************************************************"<<endl;1 b& Z* f- r/ o' s
    }! ^7 A" K! s$ @: H9 [  B' D
   
return;6 U( d) @8 a0 a  D
}
9 C( E. N, g( n8 g( J- L
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了