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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

5 X* a* a" T* U0 x8 O9 ]/ V2 @7 B" T
* q# {2 i/ o. ?1 e+ _
! M' S' M2 x& |6 b9 l// 头文件包含3 ^6 J# z0 w" Y) j8 ^
#include "stdafx.h"
9 A! `% }' e: Y; `/ g( [) o. b# O#include
<WinSock2.h>
' \% O& P3 z1 y% o0 x) x#include
<Iphlpapi.h>
3 `- g' P" `/ s. z#include
<iostream>
$ E; W" Y' p8 v( [/ h; R
using namespace std;
, x+ J! ]4 ~5 |/ R
// 函数声明; {9 ?3 e) F# A7 X  F
void output(PIP_ADAPTER_INFO pIpAdapterInfo);# J" Q0 `* T! ]$ K& [* H
// 程序入口
4 P% _1 |1 d" G4 Y
int _tmain(int argc, _TCHAR* argv[])
' y5 s( O8 z# K& C; v3 J& A{  P/ ?3 D3 P4 k: V6 t- f
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
. x; k4 y6 E* y2 M7 Z/ W# b
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();' V4 _+ e! A) y& H- q# F
   
//得到结构体大小,用于GetAdaptersInfo参数
/ s" L' b2 p8 k; F+ b
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
1 z& t( f2 ^% b& I$ }4 C. N   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量  T; L0 @! Y% ]0 f: ?
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);, B- n7 e- {5 N6 a8 N; _
   
if (ERROR_BUFFER_OVERFLOW==nRel)
9 B# v* u; x8 \4 g8 P0 `+ |    {
1 \$ E( {% k/ \* e3 m; E, r         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
! t- }! f5 o0 C1 a5 `" O7 K) x    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
9 N* @- j4 r* `3 G) `        
//这也是说明为什么stSize既是一个输入量也是一个输出量
0 P, V9 K2 u" |# P& h        
//释放原来的内存空间9 s2 R- x$ @. C; z$ [
        delete pIpAdapterInfo;8 U' b. S, D5 J: f8 m: ?; ~. x
        
//重新申请内存空间用来存储所有网卡信息
3 `+ ?% k% e! i5 o; F: Q* @
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
! j" u: V" R  O' s        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
' }9 P4 i( y7 R
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
2 y3 |- Q, I6 j7 o1 L: k3 V7 E    }
: t& T6 h: L# j" m9 b   
if (ERROR_SUCCESS==nRel)
% J+ b2 g* w( @  `: M    {5 _+ l2 }' P# [) y3 z  i
        
//输出网卡信息
* j. K# Z' w0 V' ], V, h! y4 h
        output(pIpAdapterInfo);/ \8 D6 w6 s8 S; r* R1 w4 E
    }9 W& ]: P5 p, l: k! f
   
//释放内存空间
/ \# b( t: W% |0 d! _# N# |, V
    if (pIpAdapterInfo)
$ K7 Q2 X1 H0 ]# @    {" ~: S( ~3 [' ], x* m) i9 t
        delete pIpAdapterInfo;) ]( Z, i3 o, u2 T% i6 h/ j
    }( ?( n) l6 W6 v: c$ j' |4 }
    getchar();
2 ]4 Q6 c) [0 K5 q) _# ^1 d   
return 0;
& K2 e, z$ i! O2 ^  J, U1 K& P# F}) o( V# G; @8 Q
///函数作用,输出网卡信息
# R. E' D. f- z
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
5 T1 S5 I* k- x( ]4 |: G" _6 A7 {{
- M& X3 [& H8 n" {/ o% W8 g   
//可能有多网卡,因此通过循环去判断
3 c8 k) O& P7 t& \8 \8 I9 U9 J
    while (pIpAdapterInfo)! l. r" O9 s- Y1 X; P, u0 Y) r
    {7 H+ S  p4 |' C! D! o
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
0 S# X% F7 \; r( \# ~        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
7 X& v- V* m; s        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;8 }" A7 O4 O0 t5 R- h
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)* K! V/ B+ i% R$ t) a$ G" R
        
if (i==pIpAdapterInfo->AddressLength-1)7 k6 \* Y6 W; `  D
        {$ g7 J* ^& j$ I, p: ]1 @
            printf(
"%02x\n", pIpAdapterInfo->Address);
4 L' v! ~. W5 @$ c7 }4 i+ @        }, c7 B0 p- P) _
        
else
7 D: o0 k) w) O% e2 z        {; }  p: z/ Z2 j3 M) R  `& ^
            printf(
"%02x-", pIpAdapterInfo->Address);' `& I- O; P$ {0 V6 Y6 S
        }
5 Q0 L7 j; C$ n" ?; f5 P        cout
<<"网卡IP地址如下:"<<endl;
, k  V, ~8 |6 T# r5 u2 j+ {8 S        
//可能网卡有多IP,因此通过循环去判断  k) ^. S1 A* f8 [; S
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
0 E, \' i$ m/ ^* r        
do
9 ~& Q  G5 ]0 T# B" ?4 g        {# b( l$ U2 f8 X; `/ W
            cout
<<pIpAddrString->IpAddress.String<<endl;
' N6 W2 v" I, z+ U            pIpAddrString
=pIpAddrString->Next;
7 K/ p1 N5 M3 R        }
while (pIpAddrString);
6 p% l$ J2 f- X- X2 a7 ^* e        pIpAdapterInfo
= pIpAdapterInfo->Next;  q% T7 g+ o$ X" v+ u! E
        cout
<<"*****************************************************"<<endl;
1 U+ @" F9 P5 r0 i# M    }
$ O$ j" g3 H. q3 M   
return;
4 B8 l: ?5 ]: A3 v0 R- ~}

# w' h1 n) D* v) ]9 d: d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了