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

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

[复制链接]

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

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

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

x
$ f; k) P+ `; a4 ~' p. U; K

+ G% j; J: p0 B6 F8 T# R8 B' W2 h5 K3 D# k! p+ s/ x9 ]' y5 r9 p
// 头文件包含& R* h4 T/ V& w% @" Q
#include "stdafx.h"+ [/ b" |" Y: L+ ?% u! |
#include
<WinSock2.h>
* ^4 Q* s9 T' t! V/ Z) o( M4 D! d#include
<Iphlpapi.h>+ r/ J- L+ J. G6 y3 k7 @
#include
<iostream>
7 i, v( q) X( h7 q, g' X" @, }
using namespace std;
. m; c  u  Z. J# S
// 函数声明; J9 Y* x' k3 e% q8 M
void output(PIP_ADAPTER_INFO pIpAdapterInfo);/ ?& B( B0 U, l( {4 |
// 程序入口
! F# q% d- D9 z+ X3 j9 ^
int _tmain(int argc, _TCHAR* argv[])6 K. b" E/ a9 O: m6 x" W3 f
{, B( r! a2 f4 p5 H1 |" K
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息/ `3 v3 a5 `8 d  L, R* @
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();9 j7 q& X' [1 P3 _$ `& e
   
//得到结构体大小,用于GetAdaptersInfo参数
+ c6 o0 ?- N: [1 n& a3 O
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);- ^5 C2 [$ s  m% V
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量' f# e- ?' E0 n, _- }2 u: y
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);" w4 `/ B5 V  E! \" K
   
if (ERROR_BUFFER_OVERFLOW==nRel)9 c# b, f! e! Q4 i; v0 q8 F
    {
2 ~9 k5 f) R- p0 W+ t4 A         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
- b" C# M, ^$ A" H. ^    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小" a- }! z- y1 i" P6 U
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
, X4 E4 [" N* A/ ^4 u        
//释放原来的内存空间8 P( S- q% t  c, a' K
        delete pIpAdapterInfo;- B5 h# E8 D/ u7 A' O) w
        
//重新申请内存空间用来存储所有网卡信息, {& K1 H. ?* V$ b4 E
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];8 e" G/ ]+ i5 T  Y) ?7 O8 |
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
/ l$ d0 a3 C' K9 U. ~. g. I6 U
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    * `( q- e6 K- ?" u
    }
% T  L, B8 E- ?* ?  ~   
if (ERROR_SUCCESS==nRel)* |" U; k- g! D) c. W
    {: e, ~' W+ r% i; O) P2 q
        
//输出网卡信息
8 V; _; }( |5 e. t
        output(pIpAdapterInfo);
) S) E) l4 D) f* i    }3 a) Q0 v4 C( {1 t$ a
   
//释放内存空间& ~  \1 p; O# p4 v1 s
    if (pIpAdapterInfo)
2 d  W& ?3 E, T9 `" [" Q& X    {
) b9 a: G6 u' l- v2 E        delete pIpAdapterInfo;
+ K7 f9 W' ]0 h: g5 R! k    }
/ ]2 x! S& l0 r: G, v    getchar();
; u$ G. m" O3 c% N# g" I3 }: p   
return 0;
2 A' ^! U7 Z7 W}
  L( a$ D$ S2 a
///函数作用,输出网卡信息4 g8 F) @* S1 D2 M8 u/ k" W
void output(PIP_ADAPTER_INFO pIpAdapterInfo)2 A) i* A5 j; k6 ?: v6 W
{
  U/ Q1 n$ i8 I. S' h1 x! A. ~   
//可能有多网卡,因此通过循环去判断
% B5 j6 z3 @, k. J' e; A* ^
    while (pIpAdapterInfo)" t  p5 T4 G6 K! f$ w9 t  U
    {, t5 L+ X6 P# W7 X, D
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;; ]) f; u2 M. X: }! C
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
) u- D* i0 @1 v) S* D- B        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
% P& J! Y$ V! s! z( w$ ~7 p        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
% W& k" H( `9 f! ^  s        
if (i==pIpAdapterInfo->AddressLength-1)& D1 l' C  [# M' C8 ^
        {
9 z: |* G) J1 ^            printf(
"%02x\n", pIpAdapterInfo->Address);
; u7 m/ Q0 B1 b! x% ]        }: {( V2 \7 e3 n, J* b+ j
        
else
1 l; d, r+ K, w7 _) V        {
/ S' i0 m; ?$ F: A( }( h/ W3 h            printf(
"%02x-", pIpAdapterInfo->Address);. ?" e& E; B# M+ s0 R) a1 m3 O2 Y
        }
  }8 _9 r, G: ^. T' k( f        cout
<<"网卡IP地址如下:"<<endl;1 K% D3 P* B1 E
        
//可能网卡有多IP,因此通过循环去判断
( j( H8 `1 N7 U+ F% ^
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
7 v% I* t3 M7 |) D+ u0 \2 G        
do , Z1 g. ?8 ~* K! A3 Y7 D1 e
        {
0 n5 a2 b/ g; z' {( K/ w            cout
<<pIpAddrString->IpAddress.String<<endl;
! i+ e; r! {6 R% @            pIpAddrString
=pIpAddrString->Next;
0 n/ h7 _" s3 `- O  k; ~  X  L( C        }
while (pIpAddrString);& v0 x/ g' Y' T9 H! f. Y6 u
        pIpAdapterInfo
= pIpAdapterInfo->Next;0 p) i; R; u; T. H' I: X
        cout
<<"*****************************************************"<<endl;5 r  b3 a6 d; [; C$ E2 k# h! A
    }
- g1 K3 T$ }/ T4 I4 I   
return;
; e' g; {( r5 w! h! Z( f% S}

& ?; ^, I" F' @1 Q
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了