PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
. X! H" K3 `* {

2 p: o1 `* q) e* L7 l5 }; U4 s2 C# m1 O& k: D0 M0 V
// 头文件包含
2 L1 ?8 v1 m; g
#include "stdafx.h"( e. o" T) Y6 W8 S) \1 B7 L9 |3 p( E
#include
<WinSock2.h>
/ W2 m( L1 q' n! E& K#include
<Iphlpapi.h>
3 g! H8 ^" P+ j" C/ w9 F#include
<iostream>
* U# j% F6 ?* g2 F
using namespace std;
& Q9 |6 ^. L1 C2 L4 _# e* P  `
// 函数声明: G! T' c2 i# K0 ?4 K
void output(PIP_ADAPTER_INFO pIpAdapterInfo);2 [, X! A- _% \9 S
// 程序入口
0 _- J+ G4 E1 l9 m3 [; _
int _tmain(int argc, _TCHAR* argv[])
' P, ~* d8 \/ [. }8 a{
7 R! N: F+ ]( s& E) P% n, i! i+ C   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
- z+ \) g4 Q, M( L4 O4 T
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
7 `6 A0 E; k% j   
//得到结构体大小,用于GetAdaptersInfo参数6 O( }+ W4 {0 |& ?0 x/ t
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
) a* y, W& a' Z$ T   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
1 O0 N. B9 J! j2 q5 {
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 H9 e$ a) Q' d0 ?4 q+ Q   
if (ERROR_BUFFER_OVERFLOW==nRel)- y3 q4 q' x4 t5 X" F2 y
    {
& C1 F" |6 u( D$ b9 N3 D, V         
//如果函数返回的是ERROR_BUFFER_OVERFLOW# Z+ e6 T/ s, d& a" T
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
  L2 D: \( d; C" l# W        
//这也是说明为什么stSize既是一个输入量也是一个输出量* S8 Y8 M% `" T
        
//释放原来的内存空间
- `, m; n' j. a4 z% P/ u
        delete pIpAdapterInfo;
% n) v5 ?0 u9 O4 d/ q$ L8 J        
//重新申请内存空间用来存储所有网卡信息% v8 @6 h( N6 V% Y, p2 X. W
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
2 _- A" s9 {2 U5 r        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
6 ?1 t( _  o% i; |: [5 U, `: c
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    ( g  P, |3 z1 O% V
    }* Q0 Y7 C: n6 K9 X/ K
   
if (ERROR_SUCCESS==nRel)
9 R# I& w0 q2 a! L: W    {
" {" e# o. B9 a! P& t( l: g        
//输出网卡信息8 t9 o# V4 U/ r6 w4 s( \; U
        output(pIpAdapterInfo);
* `4 K. N9 B0 c* y    }: i6 Z9 Q6 ~3 i& V
   
//释放内存空间
* h# t; B8 q" x: Y! F
    if (pIpAdapterInfo)
$ F. m" u2 R, w1 a" i/ C2 k& s    {
: M  e' b8 [* V8 e/ V        delete pIpAdapterInfo;* g# Z0 b7 Q; m. ?* G- H
    }  l! ]7 b4 z6 Q% y, e
    getchar();* ~3 ~0 p+ _% i8 Y
   
return 0;* J9 _7 \3 x5 s
}4 y* P$ ?7 e3 x! E' E2 r4 A+ `, B/ E
///函数作用,输出网卡信息8 b. y) I1 [& j" h8 O; c& M& h4 O
void output(PIP_ADAPTER_INFO pIpAdapterInfo)# C6 }' Z2 c# T- v4 B
{% I6 H$ i* Z" L; ]9 j" S
   
//可能有多网卡,因此通过循环去判断
* @( b4 O- @+ V3 C, |" A
    while (pIpAdapterInfo)2 I+ Q  g  M; Y, W- L3 h5 u2 n
    {0 D7 Z; N8 g! A  y! R/ s$ c% g5 a
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
& ~) @- f; b/ [. _1 v: i        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;8 X7 H6 r$ u" S
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
, H% |( f, R# ~; Q1 s7 q        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++); T) l1 q8 ~: _" F4 R6 \! M3 [
        
if (i==pIpAdapterInfo->AddressLength-1)
$ T! n4 w) Z& G+ `( E        {5 q* C! F7 r' e
            printf(
"%02x\n", pIpAdapterInfo->Address);
/ _: t' _' e1 P: P" K: L+ b        }
* M; e: w( R/ ^& Q% w, o        
else
+ }9 ~$ J1 P# c; A; H/ ^        {6 `% l* N# |' \6 {0 r1 f5 r! u
            printf(
"%02x-", pIpAdapterInfo->Address);6 y" f6 n, S1 w/ w% V- T2 `
        }
& F7 P4 a- S- c/ [# O- k& W7 h        cout
<<"网卡IP地址如下:"<<endl;' W: c  ~$ ~* K2 ^7 d8 c
        
//可能网卡有多IP,因此通过循环去判断9 I: o, ?+ i. B. K  Q- ^/ Y; [' X
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);6 C! U, S' a3 e9 A
        
do
4 q0 ~& E- X- i/ D1 \- T! w        {6 ~1 c! n; o: V# V
            cout
<<pIpAddrString->IpAddress.String<<endl;
! t6 C! o( e4 Q! \  J+ C" n            pIpAddrString
=pIpAddrString->Next;! Y5 _/ N  ]& ]
        }
while (pIpAddrString);. P# @2 v" F! L0 Q2 z
        pIpAdapterInfo
= pIpAdapterInfo->Next;
# j2 o8 r  r; w* y! P7 v9 i        cout
<<"*****************************************************"<<endl;
2 C1 u$ K# K' @* ?6 q7 H# H    }
! J" w) R# S% B4 b   
return;
7 S" g6 A* s2 f7 }' m' y}

1 a7 @0 H6 G2 t" R" o/ _
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了