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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

( p1 n4 X4 x1 J0 h+ b. _
" G' r+ J/ b1 A, a* l' F" D; u4 F6 i( M2 T! t7 ~, x: G3 Y
// 头文件包含# v8 ]) p- L* }2 V1 }
#include "stdafx.h"$ N' z' R$ P. Z9 c
#include
<WinSock2.h>8 a7 O4 c% M- z* e
#include
<Iphlpapi.h>
9 S. H! r/ c  v. V+ h5 P: A#include
<iostream>6 S6 X% M0 _: b. ~9 a' }  ]3 C
using namespace std;
  C$ l" ?( e0 }# A
// 函数声明' w6 x5 ?1 A4 W+ b
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
* V. _# L# `- V' a' [) H$ }
// 程序入口; U5 E1 g& x- P8 N% I  N
int _tmain(int argc, _TCHAR* argv[])
, i2 |4 r& A5 H! E{
! V+ q, ?% m9 _   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息. \" t# N9 H$ c( X. u/ X
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();0 u" e. u/ \. b  }
   
//得到结构体大小,用于GetAdaptersInfo参数
2 u% T* \  y+ M, r
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);" G( b9 G" ^$ t  L3 t$ \5 G7 U
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
& M% K2 C7 C5 W% Z0 |
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);# U( E! ^! N9 {. E( D1 ~
   
if (ERROR_BUFFER_OVERFLOW==nRel)
. x6 k7 U: F6 X; p  q" @    {0 I. ?) z5 @! R0 j
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW) N; `8 K# G& i8 L# f2 K5 a, n) S
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小7 a7 T. h9 E( _7 P- n* S, ?% V
        
//这也是说明为什么stSize既是一个输入量也是一个输出量- ^2 v2 n+ R" O0 q9 j' b
        
//释放原来的内存空间& d, t" `; j+ H8 e( i
        delete pIpAdapterInfo;, \; [" L, z3 Z2 w. j
        
//重新申请内存空间用来存储所有网卡信息6 q& s8 L, z% h9 y1 R- m
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
8 ]5 x+ M9 p5 R+ h+ q  _/ |2 e        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量7 A$ r, }' [; T; Q0 g9 ^* z
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    2 M+ B9 Q! G$ n
    }+ D! I1 }* Q% P0 T! N6 s  f
   
if (ERROR_SUCCESS==nRel)+ Z, E( J% ^, P7 E9 j' Z8 g( _# R
    {
% r& `, o0 m8 E4 r, J0 C        
//输出网卡信息
; P0 W; n$ j! o+ S6 y
        output(pIpAdapterInfo);# u, G1 F2 U* r. h
    }
; J) M# m; |2 D/ i   
//释放内存空间
" d; ]2 ^* u- n0 c/ q0 ^
    if (pIpAdapterInfo)9 ~% L9 x% H! r) t; ]3 a, V
    {
# W0 C8 U9 ~; O. s- B/ u' H        delete pIpAdapterInfo;
, ?0 f6 K! d7 C2 o' }! \    }. p+ \% E+ Z. q; J
    getchar();# y5 ?/ i1 u& l1 P# u+ Y7 A% P
   
return 0;
4 t6 R' f* Q, l" S/ M0 B" P}
( p) E  i* X4 ~* K- ~. F: Z- ?# O2 ^
///函数作用,输出网卡信息
8 U# G% ]& U0 }( X
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
+ @" l9 ^4 C# T! g$ O{
0 R5 _3 J& p2 A5 [& T  L   
//可能有多网卡,因此通过循环去判断, y4 m8 i1 Z+ V9 C
    while (pIpAdapterInfo)3 d, W7 i5 P5 [4 q
    {  a; \' }" f% }: O, p% L6 ~6 t) l* w
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
" F8 j- T) z- }9 Z- s        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;  N( R9 p. F4 a) E# H& _
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;9 ~( m6 z! Q8 N; e
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
( ]$ C- f7 w4 {. w1 W        
if (i==pIpAdapterInfo->AddressLength-1)
4 Y0 ]4 M5 R7 b2 H+ N/ m2 x        {  c+ b" ~/ i" G( x5 X3 P: W9 \
            printf(
"%02x\n", pIpAdapterInfo->Address);
6 q' S. X8 S) N* C! e/ K        }7 i5 E8 A" n) ?+ _$ s/ q8 g- C6 R7 b; e
        
else; C4 r; k, J, S7 g) m$ I4 y! M
        {: J- r, G4 ?9 f4 l  R
            printf(
"%02x-", pIpAdapterInfo->Address);
$ f) d$ m1 p2 y% W0 C' X# r        }: B5 r6 i+ Y4 k* @) o
        cout
<<"网卡IP地址如下:"<<endl;$ C+ b1 H" L( r
        
//可能网卡有多IP,因此通过循环去判断
0 u1 A2 X1 \0 r/ y/ P  d/ |
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);0 S  k: i$ T3 n0 o9 T! i( C
        
do 1 y9 p  [! V- F2 v1 X
        {  h4 r6 ?- u. m% ?) q0 X$ w
            cout
<<pIpAddrString->IpAddress.String<<endl;# k. q/ }- |4 g. E' S" N: N  @) j; ?3 N
            pIpAddrString
=pIpAddrString->Next;
  G2 D0 {! c# d+ X6 x        }
while (pIpAddrString);" }9 h  T; y0 q. Y( r% ~
        pIpAdapterInfo
= pIpAdapterInfo->Next;" t# i- C8 ?1 x  n1 x5 P
        cout
<<"*****************************************************"<<endl;
1 r3 B3 y2 F; K. L, t% z9 e( v    }
- b: [* S, i( d( ~( t   
return;, s4 F7 F2 c; S. l1 L0 j- n
}
& [8 n2 e  h' V- S' K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了