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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
4 p+ n0 {6 a, f) Q) G* z- s, {
! Y7 c& E  B: K8 E$ D7 g# t. A
- W. O) Y8 x3 X, }2 e- M! T( a
// 头文件包含
$ @. ^& u. r9 f7 P. n
#include "stdafx.h"
+ S2 b) Y( J: \" M#include
<WinSock2.h>) y& `! D/ @5 G9 q
#include
<Iphlpapi.h>3 l, h5 J& k" M" {, b7 h3 j
#include
<iostream>1 I8 j+ X. `. W! J" R* X: n/ S
using namespace std;* b8 Z& E/ C) P9 t% G
// 函数声明
5 A& v0 d% `5 d; @4 F. ]
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
* Q% E2 D# C) y' D- t2 p
// 程序入口6 P, t0 K, M! o. @" P1 s  H
int _tmain(int argc, _TCHAR* argv[])
$ [) Y/ _" O! {* r. ~. W{& W' ^" b( `" w% D7 f* G$ g" c/ S& f4 z
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
6 a- I& S* o' J% W6 \
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();. A( P- t7 Z, _; ?; H
   
//得到结构体大小,用于GetAdaptersInfo参数$ w% {0 z6 o" u0 j# t
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
- i1 h# m! p8 }9 p, r; `1 d# E4 ~& `   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量5 j/ b% r: m2 P' A4 `& D- O9 O! Q
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);: o% y( w/ |+ J3 i* y
   
if (ERROR_BUFFER_OVERFLOW==nRel)
0 }" r) f7 y2 R) f: d    {9 ]+ K1 |8 \8 a$ y7 f
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
1 \% _! E& H% C, u    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小0 z' Q8 d3 ^6 m6 d& o4 l7 _6 t. N  C! H
        
//这也是说明为什么stSize既是一个输入量也是一个输出量* A: {5 G. j7 c+ c+ _
        
//释放原来的内存空间
2 O3 H) N7 a- e9 j$ w, D( j$ G# d3 h
        delete pIpAdapterInfo;
# m% \% M% _( r7 d# C5 I/ S4 q/ [) x        
//重新申请内存空间用来存储所有网卡信息; K5 e5 z" L" e+ ~( r7 [% N
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];5 o1 D6 J( K  R% V
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量' c9 j  A3 C# ^1 R0 B* f  E; M! t
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
9 {) X, W. n  U% c9 I) i  Y    }
7 \& g# I. `0 D, V0 g% W; q   
if (ERROR_SUCCESS==nRel)5 G! J# D# G6 q1 o9 d. k; d3 L
    {0 S" `7 J$ t8 `8 F
        
//输出网卡信息3 d8 H( t1 P0 |2 Q( X0 t$ H
        output(pIpAdapterInfo);
7 z4 X8 R6 W5 E: a1 Z1 B- i- u    }/ U% o2 V8 V3 O
   
//释放内存空间6 t: m9 Z; b- T" O- R
    if (pIpAdapterInfo)0 C6 L2 T1 F$ A% B. X- h3 e8 P
    {
# l% D# ^  f( {( Y6 R. |        delete pIpAdapterInfo;/ u5 C5 K& K9 E9 |+ W$ u, }
    }1 R7 L5 R  a. P+ U
    getchar();  B; M" M$ ?8 v* x% h, U
   
return 0;
8 Z2 _- a% z8 `}
* j1 {  W/ C* _6 }# R+ V: O, m
///函数作用,输出网卡信息& O# q5 w, T# N: \
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
( ]6 q( \) ]& n1 b2 F{
  K5 w- M4 ~- d   
//可能有多网卡,因此通过循环去判断
7 U* h# T6 i6 q. Y  G5 }
    while (pIpAdapterInfo)
' P% n* v" G3 i1 e( ]; y    {
: _/ v9 l/ L4 J# {5 m" j8 B. t9 i5 U        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;# P2 u2 S: J& s/ N9 {
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;2 f) ~8 E; E8 r0 X
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
! k. ^" g5 V* @3 f5 |# C        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)9 ]' ]/ k3 x+ n
        
if (i==pIpAdapterInfo->AddressLength-1)
, T/ J5 k% a" \+ C        {
6 z8 C' R7 g8 K( _% V: r            printf(
"%02x\n", pIpAdapterInfo->Address);( H5 T: g* I( v( g/ n' k
        }
) Y- c6 M+ ^2 p. G8 j& G        
else) m4 d  s1 f5 I# Y& M1 K+ p
        {# o! s1 A$ h1 m) {' k/ M+ q
            printf(
"%02x-", pIpAdapterInfo->Address);5 N" p& h+ o. t: d5 @- O% p
        }
  J! e! e6 N1 v, `9 [) T% ]. c        cout
<<"网卡IP地址如下:"<<endl;
  A; S4 D9 R  ^- e% i3 L        
//可能网卡有多IP,因此通过循环去判断2 C, j7 j0 ?% c7 Y4 S
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
4 o7 u  @& i3 Q; e! c$ x0 M        
do
8 _8 Y7 L0 r7 E) d8 @        {" z6 d+ ]1 I; T: @3 v- ]& `
            cout
<<pIpAddrString->IpAddress.String<<endl;, \- w( v$ @+ Z
            pIpAddrString
=pIpAddrString->Next;
+ i' K0 o2 |) n9 f0 u: j1 ]        }
while (pIpAddrString);
% i" A3 W  x, s' h3 ^  l3 K: ^+ w        pIpAdapterInfo
= pIpAdapterInfo->Next;
$ N+ u/ X- T+ J2 r$ k/ \9 k        cout
<<"*****************************************************"<<endl;/ r# C3 u' _9 P4 S
    }
7 b- F7 `# l: `7 E, w   
return;( T9 z& N( j& `4 V7 N; d
}
2 x0 A/ e) |8 B  r% r. r4 ~
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了