PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

7 p4 J! x) N: u( P4 H8 F( b4 k5 J+ ?- Z" z- M1 ^
* h; {5 _4 O, P( X; G5 B5 }
// 头文件包含1 [4 H0 a/ P, |. X8 B9 [
#include "stdafx.h"
( t2 m) m9 u# ?#include
<WinSock2.h>; `& `3 c0 R0 A- i2 `
#include
<Iphlpapi.h>
. Q- j  T' N: A: C4 H( P; t) Q6 }; _#include
<iostream>9 U0 Z7 S! v2 {+ Q8 `& A* M  v- F
using namespace std;/ }3 W/ @+ z0 S0 Q
// 函数声明
7 [5 g9 o' o7 |$ ?' s3 L
void output(PIP_ADAPTER_INFO pIpAdapterInfo);  A* b' J( _) M- c& {( \
// 程序入口7 B% C# c7 I: d2 `
int _tmain(int argc, _TCHAR* argv[])% n4 y+ P5 t4 ]' B% D( X. ^
{) t5 ~% f* O3 Q1 r. \2 ~1 ?
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息0 }7 L! A/ i" K1 \% \6 p( ]2 c
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();( ^2 m4 R9 e- }5 R+ p9 i  {3 F3 ]* E( N
   
//得到结构体大小,用于GetAdaptersInfo参数
2 y$ [) T% o8 N6 q9 J5 B9 c
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);8 r/ U" \+ X0 B( S! X! {
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量2 S/ p7 T4 U( ~* n" F0 _! x! ]0 G+ |/ R
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
; p4 _7 ?$ R, `4 A- ?0 C   
if (ERROR_BUFFER_OVERFLOW==nRel)/ T% e' Y9 m/ Z" w/ {
    {5 f2 P# h2 }( w
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW/ P$ n# j5 o1 o
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
+ H- f. I, _7 F' s        
//这也是说明为什么stSize既是一个输入量也是一个输出量: x& m% w& n/ {: W, d
        
//释放原来的内存空间
' m) K( T5 K' d: a2 F
        delete pIpAdapterInfo;
# _) b6 {4 ~8 }  D0 j        
//重新申请内存空间用来存储所有网卡信息
$ O8 o7 X+ Q5 G  O% {
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];/ ?0 C* N$ M+ {& a- y
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
( x0 [7 a4 V6 x  z: ^: d
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    7 R6 |. z% C/ \6 e; [2 I
    }) F  W+ d7 x3 W
   
if (ERROR_SUCCESS==nRel)' j7 o- W+ S7 F
    {3 s# k0 U: }6 B4 Z2 \/ m: _  n
        
//输出网卡信息" Q$ V6 v7 K  y. x1 M; r: h
        output(pIpAdapterInfo);
& _/ p/ R) Q3 ]# g* W& v    }2 v' U& |- I7 N. P
   
//释放内存空间/ o) W- s" {; X. O% y, X. k
    if (pIpAdapterInfo)
- ]& d2 v* i" ^    {
1 o! G! J0 F5 t* J        delete pIpAdapterInfo;
: s" c, n3 V, @& B- B% t( I0 Y    }6 Y9 L6 ^2 c4 y# Q  G
    getchar();6 z7 W# s1 J( @3 v. q9 x* j
   
return 0;
2 D% r3 w. S; q" X& l, q% `}
% g, I+ L+ y7 Q3 N+ O$ R% S0 l  s
///函数作用,输出网卡信息, H. ~. v8 k6 Z7 F6 F
void output(PIP_ADAPTER_INFO pIpAdapterInfo)0 g# \1 f/ f, R+ @& N9 q
{; ^, [) X) S* }: Q! Q# F2 {1 n
   
//可能有多网卡,因此通过循环去判断2 R- ?1 j- n; o1 f
    while (pIpAdapterInfo)" Z4 I1 m0 `& t. N& ?3 ^
    {& v8 ]( {6 }7 h8 {
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;) S9 \( Y, O9 G6 S2 S( D
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;6 {( `  \0 }8 A! I2 N
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;' U! W) u; ?2 {! Q7 B$ K
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
# S- i6 m" v* `- `        
if (i==pIpAdapterInfo->AddressLength-1)2 p. Z3 c+ W* O9 y% N6 C* h* H* j
        {
: n: q8 K  ~; v" E# {* K) V            printf(
"%02x\n", pIpAdapterInfo->Address);# n: r" Q0 H0 z6 z
        }7 [( D* A2 S3 n/ _
        
else
* K, q4 W6 ^6 m4 [$ B        {) t1 e) ?9 C. C' T9 U7 }" A
            printf(
"%02x-", pIpAdapterInfo->Address);6 m: ^& H; P5 c
        }6 Y( R+ h$ D" L% ^  U3 q0 s
        cout
<<"网卡IP地址如下:"<<endl;
6 g' B/ ?- f7 _1 s$ |1 q        
//可能网卡有多IP,因此通过循环去判断2 j5 N: ]$ J; B8 w7 p0 G# p$ i
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);0 Z8 X9 t* q, _0 m( i3 X
        
do
% q6 h; `& v1 {/ G        {" Q0 I& T* V5 N* ~. K, r& V9 O
            cout
<<pIpAddrString->IpAddress.String<<endl;
# i9 G; ^$ K: d1 J4 |( `            pIpAddrString
=pIpAddrString->Next;
$ m2 Z8 p3 J7 F5 P        }
while (pIpAddrString);
1 i1 O* L0 l+ Q' v% a5 z" \1 k        pIpAdapterInfo
= pIpAdapterInfo->Next;
! g  p' \5 o& u6 P. E5 W- P0 `        cout
<<"*****************************************************"<<endl;
2 p, T# r: G7 G3 C1 x    }
, c& v* S. M" E  l, d/ T4 r   
return;+ r+ ?- p3 d5 h4 A4 U! \
}

, S' Z5 g: K* b6 V
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了