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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

5 ~$ y' ]7 `3 q2 Z' I
" ]3 O/ X; a! X- q2 v1 L$ x6 B5 b0 J9 `6 i9 ^1 s$ G: H# |. J
// 头文件包含
$ P( X( g/ t$ E/ m7 @% d* d' B
#include "stdafx.h"
* I% l# e) P8 Z' m, q/ e  N, \3 w#include
<WinSock2.h>
' P1 d9 s+ ~* R5 I9 g; c#include
<Iphlpapi.h>
1 |7 x/ A1 X  K' H* f7 R4 T#include
<iostream>
; \+ l& w' L- L
using namespace std;
) j1 E3 t3 r4 B: `9 l
// 函数声明
0 R- i& X& X8 B+ e: P3 Z
void output(PIP_ADAPTER_INFO pIpAdapterInfo);2 h% U8 h% q3 d- T/ T5 |0 A2 a5 k! M
// 程序入口
9 X% ?6 i4 M4 q
int _tmain(int argc, _TCHAR* argv[])
: @5 x' V$ t3 `: x1 y{! x* P9 E' m. a
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
( ^9 R9 a6 [& k! x1 j3 i* O
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();3 z! M8 [2 C4 ]  s* i( S
   
//得到结构体大小,用于GetAdaptersInfo参数9 P/ B4 u* f/ ~8 `
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
: A* }8 x  A3 ^: D" D   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量5 K4 Y; i, O8 I) f9 P. @/ i' _
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);$ ^* p0 V6 ?$ o5 z  U) A8 K
   
if (ERROR_BUFFER_OVERFLOW==nRel)
6 y! \1 `/ k$ [    {
0 j$ Q( ^* T! e6 f* A0 g         
//如果函数返回的是ERROR_BUFFER_OVERFLOW! o7 C$ H8 E2 i$ s
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小$ V$ c0 M- @) e& B
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
% P9 _5 d& e4 E5 |, Q1 S        
//释放原来的内存空间
' s5 Z# H* N2 R. Q+ ^
        delete pIpAdapterInfo;
, K/ [9 B% z' ~; W! M        
//重新申请内存空间用来存储所有网卡信息
8 ]7 r6 l2 u- v4 k# Q* y. U" X  ~
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];: P  c7 H7 O" {+ s
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量$ N, \' j) k6 K2 `4 i" |& _
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
3 U5 n, U7 ^1 R$ u$ t, ~' H    }
/ n' W" B0 C' p1 X" s# F+ T   
if (ERROR_SUCCESS==nRel)
& @+ @* j+ M: P1 m  }  z" Z8 C    {/ `0 }  n9 z0 @! W: w" T
        
//输出网卡信息- k. m3 s  g0 a/ n# A
        output(pIpAdapterInfo);9 \7 P2 Y; e/ r5 e# M) R
    }" v8 E6 C. O% ~
   
//释放内存空间' p  r& C  S* |
    if (pIpAdapterInfo)
5 E, @/ V% p; h* b    {1 @2 ~( u- N0 N3 B# _
        delete pIpAdapterInfo;/ P. h9 U2 ?6 {2 l* W! h
    }0 k! ]& ~- i% N. B
    getchar();
5 K8 |/ X, }' x* U1 }   
return 0;  G+ ?- ]. ~: F$ S
}
5 c  v0 A& c; k6 L
///函数作用,输出网卡信息# h3 ~9 m1 p1 }' q" A8 @1 z/ }
void output(PIP_ADAPTER_INFO pIpAdapterInfo)( z) J3 M# o; @
{+ O( i! }0 W. V8 B% m- C9 f. q
   
//可能有多网卡,因此通过循环去判断. l% x; u: N% J, K8 L
    while (pIpAdapterInfo)* K& T( s+ X$ l0 d1 B2 K
    {
% t0 t" V  W& D% L+ z' G9 x& `        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
) k) ]/ o8 S3 T$ J        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
; g9 n  ^4 [! F, U5 h# T% E        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;0 Z  j4 y! }1 N1 L
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)+ i0 Q( Q4 C1 J* ?
        
if (i==pIpAdapterInfo->AddressLength-1)
2 t6 h) k- g% U0 t6 ?        {
2 w/ `. x6 \( ?6 Q8 b+ J! ~6 n% R0 s            printf(
"%02x\n", pIpAdapterInfo->Address);
$ w- m. G+ n- l2 Q! U        }' Z+ a( S, b4 |8 k
        
else
  t. Y9 m! r( `# ?& W0 e* I$ S        {
! n/ g* n; |+ Y/ W& i3 R  b            printf(
"%02x-", pIpAdapterInfo->Address);
# n: I- v7 q, p        }1 Y% E7 g- j. M- \0 I5 [1 W
        cout
<<"网卡IP地址如下:"<<endl;
$ }4 a/ M; Q: p6 w3 j8 m" \2 S        
//可能网卡有多IP,因此通过循环去判断
6 x7 ]$ P" w' v
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);! u& I) J; Y5 o- K0 K' d
        
do ' R; O4 h. k, n; m
        {
7 S& }0 \( c7 R% g! }+ B8 F4 y            cout
<<pIpAddrString->IpAddress.String<<endl;
5 U' f$ C# l6 m3 t( b            pIpAddrString
=pIpAddrString->Next;
1 V: X% q7 I- G: i) z3 }        }
while (pIpAddrString);1 }9 A$ T3 F; P9 D$ k! a
        pIpAdapterInfo
= pIpAdapterInfo->Next;3 E4 U$ T( @& c. y4 x- t
        cout
<<"*****************************************************"<<endl;
# l% g* Q% z! ?( X. d/ b    }
" o; I' K2 g3 C; F# {   
return;0 h/ g# \4 I. B
}
: T, t9 }. A3 O( l6 b/ T
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了