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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
. {8 f7 ?# @7 C( L5 T2 d& s* g" l

9 c! u1 r. j, L; p% {2 `9 v
/ O: Q. y' ]- u7 {4 w" X- c  O// 头文件包含
- F# l+ x8 M& p9 t$ [# B
#include "stdafx.h"
' ^1 C# b! H4 ~8 _" s" }0 O#include
<WinSock2.h>
. _5 D; B! @1 [/ [' T: l: Y#include
<Iphlpapi.h>
  m% g  f# k! f: X2 [# k#include
<iostream>0 E+ y3 d. G  Y+ A+ C- q
using namespace std;
; @4 m1 j# y& {% H& m5 l
// 函数声明1 |3 e- L, I) r# v# O7 N: Z" C0 T( R
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
( C2 }) w1 z8 u7 [
// 程序入口
, w* G4 r; T+ X3 W4 d
int _tmain(int argc, _TCHAR* argv[])
3 {2 Z4 Y+ `2 L{
( O0 Q; k; ^: B) z8 R% a- w   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
3 J" \" A: W/ J( K2 z
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
. x- i9 M6 N! m$ Q" ?   
//得到结构体大小,用于GetAdaptersInfo参数
; s: ~+ z! C; ]" x
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);7 c& t* f5 H  u: p  |3 i9 i7 D1 C
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量5 ^2 t# k) q) p. _" n  Q
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);% t2 }0 h# U4 N; [# J5 g, q
   
if (ERROR_BUFFER_OVERFLOW==nRel)
3 z8 O7 {+ h, \    {7 [4 C7 g5 M; G8 |3 i
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW. Q8 C% C: q4 q& n
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
% z$ g5 c1 E8 V6 f( L) H        
//这也是说明为什么stSize既是一个输入量也是一个输出量+ n- P/ k; [5 z0 ?4 Q! Z' ^
        
//释放原来的内存空间, V* f! {3 G* T
        delete pIpAdapterInfo;  Z, i0 o: M# t1 M0 b% F
        
//重新申请内存空间用来存储所有网卡信息
1 K/ R' q( t- W8 r: i
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
! S7 r, d. W: i/ `; G" K; e        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
! E9 B, O, K3 s  H
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    . D8 _8 h, O7 }  y) `$ G: M5 E
    }) g: I+ ~2 d! L" g- {/ j' K
   
if (ERROR_SUCCESS==nRel)4 x# g, m6 m: h- H( m1 G' Z
    {3 Y4 l4 g5 b- P1 o9 J% L' b0 l" I
        
//输出网卡信息- h2 e- c9 i+ w) X7 F0 t2 n
        output(pIpAdapterInfo);
: ^) d9 W* o  U    }4 X/ U. f% `8 l
   
//释放内存空间, Q* t$ k; H/ Z# c
    if (pIpAdapterInfo)' \% k; z) u" u2 K7 B
    {9 e2 A6 M* L* f, N8 A( J
        delete pIpAdapterInfo;/ \: U/ t  _7 R
    }
3 T9 A+ ~& W* A+ i/ A1 o. ]    getchar();& L7 E# L4 }% C: S# s: R
   
return 0;
) a. O1 B) m$ S/ j. m* H( ]8 k}
7 P! s" ]  v# i) U3 U* l
///函数作用,输出网卡信息/ [( T! H6 x- e' _, U% y" J
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
( h- r0 _3 [1 U8 W4 c: o% @{
7 L* o+ V$ C$ p! E0 l7 Z0 q3 Y   
//可能有多网卡,因此通过循环去判断0 r* D0 g  l% b# G
    while (pIpAdapterInfo)
# H( E* Y& O2 {9 o7 ^- K    {/ x' w% `  e/ q# \4 p
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;7 Z; k% f$ R  f% ]
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
3 V9 ?  p8 `% r        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
7 P! l/ N9 z( {* {5 k        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)7 k4 s- W. y4 {1 [, ~' V$ T1 n
        
if (i==pIpAdapterInfo->AddressLength-1)
) B0 l* }# Q8 u6 @+ w6 h; V        {
$ a$ Q' }; A2 z! P0 D, l            printf(
"%02x\n", pIpAdapterInfo->Address);8 P8 m) B) L7 m2 R
        }' k+ r% @; v5 w! v& Z
        
else
8 W: p7 [* P$ @% X3 S' @! {# |9 G        {2 f( q/ v: N: Q
            printf(
"%02x-", pIpAdapterInfo->Address);
, `9 m) w& }" F. N1 v4 D) N$ P" [% R& Z        }
! e# \8 l( ~) s! _" T* \7 O        cout
<<"网卡IP地址如下:"<<endl;4 I. b, ^, g# t% ?4 C2 r
        
//可能网卡有多IP,因此通过循环去判断
8 Q2 K8 P( m# o4 K7 Z  j& \
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
- `  b3 l9 ]8 m3 o# y        
do $ _, ?2 o( W; f
        {4 ~% u7 q! X: Z) p+ C
            cout
<<pIpAddrString->IpAddress.String<<endl;( ~8 F% U3 a: f5 k+ B) }6 [. w
            pIpAddrString
=pIpAddrString->Next;
. S/ [6 r. x& t  F. a8 n        }
while (pIpAddrString);$ H! C5 u) C8 `) L  c, m
        pIpAdapterInfo
= pIpAdapterInfo->Next;( ^+ X9 ?6 e5 s3 \; B- m6 H  t4 c
        cout
<<"*****************************************************"<<endl;
+ U( g& w4 K. K! `) M8 m' Q3 \    }7 K( m2 Q0 U! N6 m: W9 S+ X2 N. E
   
return;
3 ]# F+ T2 F6 _. I}

& z# h" h* u* T: G3 ~
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了