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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

! s; M' ]: [$ V% s: a) l( A$ Q

  X  m; e$ y0 X* X% X* _// 头文件包含9 Y  W, Y& q3 L3 }0 L8 N% G
#include "stdafx.h"4 a$ |; X2 `, Z+ _# X
#include
<WinSock2.h>
1 u2 Y5 P  c+ J0 k4 o- P#include
<Iphlpapi.h>
6 l/ x+ t9 X0 q#include
<iostream>/ I0 s7 B4 o1 b5 m& G
using namespace std;
, ]- e4 ]( [- ]; N# |2 C# C! p! w
// 函数声明# c- M1 X0 N' t, A
void output(PIP_ADAPTER_INFO pIpAdapterInfo);( V% W* h/ J% L  z2 e
// 程序入口
9 a! ?( }# {: W) h- p
int _tmain(int argc, _TCHAR* argv[])
9 ~3 \) V" |5 K& i  k* x{
+ z  M, c+ u( y! l$ D6 Z   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
  ~2 j: X! N1 {. x
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
1 u* D, z% y/ ]   
//得到结构体大小,用于GetAdaptersInfo参数
0 R# s- o2 o, @7 w
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
; u8 L7 j& C/ g8 p, X   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' R, ^; `5 K1 J, v
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);" x6 {% {# \% S* ]3 Y8 }# j- g
   
if (ERROR_BUFFER_OVERFLOW==nRel)$ w2 k; K" e" n/ `
    {) Q8 ~5 a1 J' o4 u6 f- S0 a, Y
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
' ]6 T1 u& ?# x    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小8 {7 Z4 q2 g9 J; K1 `$ h( k
        
//这也是说明为什么stSize既是一个输入量也是一个输出量6 \3 n: e0 K4 `: b% d- g9 A
        
//释放原来的内存空间
5 }6 |- l9 ^% b5 `3 g$ p
        delete pIpAdapterInfo;5 C" p: I" t/ l/ C
        
//重新申请内存空间用来存储所有网卡信息
" G' {0 w8 `8 i/ k9 u' ^$ R- x
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];' s5 d8 j9 {6 E, p
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
* P2 R8 T1 j( n) M8 K6 z3 d( D
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
/ |, y# m$ D4 V1 ]1 R    }& t; I+ D1 I1 O' M
   
if (ERROR_SUCCESS==nRel)
, L' v6 B' e+ _# }: p2 U    {: R( k, O) f2 v+ P" ~& G) n
        
//输出网卡信息
8 n0 H; V0 S" c3 [+ N
        output(pIpAdapterInfo);
/ r$ o7 W/ \8 c. c    }% X1 H5 X: X; g7 W& i, G
   
//释放内存空间
. g! t* g" B% r9 b# V! N9 i9 Y$ n% g
    if (pIpAdapterInfo)8 K3 E$ f7 e/ i. D7 @1 x2 N2 P
    {8 K+ @8 O& j) h/ f
        delete pIpAdapterInfo;
0 Q$ y( G; Q" J* Y/ G    }
+ _" k3 I2 L7 ~4 p4 R    getchar();0 G" `- @* e# a( t9 P/ {
   
return 0;
1 S6 T; e% @# O}
/ E; j$ k+ z1 r# C9 Y
///函数作用,输出网卡信息0 v- e) {8 `. R* z
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
+ S  w$ W3 R  K8 F* `& Z{3 {1 x& T% D, P
   
//可能有多网卡,因此通过循环去判断
5 p0 C0 a" O2 |7 n6 M2 ~7 c& l
    while (pIpAdapterInfo)  g( |# [% X5 N9 O
    {* r5 m; X. ^5 c+ C
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
- V  l$ u% N8 x- ]' c9 d        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;. H: a# m# s0 ?' T
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
; q3 S8 ^! H+ R) j$ W7 P        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
! p& ^( [. z& R# m: j        
if (i==pIpAdapterInfo->AddressLength-1)8 ^5 c5 e5 x& B. K
        {
$ j; r; A0 e: ]            printf(
"%02x\n", pIpAdapterInfo->Address);0 Q: y3 @1 y* c
        }
: o7 p$ j$ A" t+ a2 g        
else
0 v3 s. ]: [5 O; x0 I        {
6 v" R6 h9 ~5 i2 a" x            printf(
"%02x-", pIpAdapterInfo->Address);
# c& Q! {. h9 m& \9 ~; {, D        }
  ~+ w+ s" I' u' ?- B        cout
<<"网卡IP地址如下:"<<endl;
* _( h, F6 N9 C) p        
//可能网卡有多IP,因此通过循环去判断
* r( S: @% u: P8 U. b5 H! Q. M
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
( S7 }! M' h* t' w' H        
do 7 f8 I* _5 E5 b- p
        {
3 E5 x& C" S  n3 s  q- A            cout
<<pIpAddrString->IpAddress.String<<endl;
4 i# o* g" ^: z8 ^1 f/ ~( U1 G- X            pIpAddrString
=pIpAddrString->Next;5 a) e" ?& O( E6 |, @1 f  W
        }
while (pIpAddrString);4 ?! x; Z1 @0 W4 U
        pIpAdapterInfo
= pIpAdapterInfo->Next;
% D0 H2 ^- L  l2 ~" k# c        cout
<<"*****************************************************"<<endl;
9 }. B% O3 N7 j( V; ]    }
7 w: M- R7 B5 i   
return;
: B4 S$ ?/ P0 i  a/ d* E, C}
6 y9 W1 l) l5 p6 l; W; ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了