PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
3 P1 [0 m! D$ Z+ I0 {, B! M# M

4 G+ k2 X# d8 ^& h
2 r* y' H0 h3 i0 S% l3 E// 头文件包含  w, w- x( R+ K: G9 d
#include "stdafx.h"( E8 X1 q7 e& x; @/ y
#include
<WinSock2.h>
7 n0 T: q0 `$ K! B. }% R#include
<Iphlpapi.h>
% _$ B9 a& r! g3 F, x& A#include
<iostream>* C& e( O$ P* P* a6 n* o* N" r# f
using namespace std;; _& Z3 A0 _- W0 {8 E' p6 D
// 函数声明' V/ l1 e" t: b! r; r
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
0 _3 y: T. i! l' _
// 程序入口0 z( B1 G+ H# K: s5 T
int _tmain(int argc, _TCHAR* argv[])
0 F$ W5 e/ n1 Z6 u: ]9 V{
6 C! {' {: l, G4 j% G3 k2 C& C# W   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息! X& t: j2 x# S' b3 C
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
( a/ h! R, M2 U/ U   
//得到结构体大小,用于GetAdaptersInfo参数  i6 W0 f6 h0 L# B* c8 Q
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);2 w; r  M, G: G: l& d- j( Z$ w7 t
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量( l7 D& }) a! u9 D: p5 L
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);' e+ _  m. d' d
   
if (ERROR_BUFFER_OVERFLOW==nRel)" {! C# X) v# s; Z. K" q
    {! \9 M: W9 l6 f3 c% r5 x( O
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW, J- b* K0 {5 x2 ~3 D3 i1 j
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
  M: B; ?5 B: H) m& }$ Q        
//这也是说明为什么stSize既是一个输入量也是一个输出量6 r3 P/ b2 r' n4 R
        
//释放原来的内存空间" H* z% T+ C$ r" V3 \8 {" R* Y
        delete pIpAdapterInfo;- ]" q$ C5 L& o; h' |
        
//重新申请内存空间用来存储所有网卡信息3 h1 z9 B/ s6 O7 z; ^/ n# v: I3 K
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
- t& a6 [* L( B7 |- g        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量. E5 ~: k3 w7 S+ @4 r
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
0 _$ n3 f3 y% C2 M    }6 E6 F! ~3 G% p! {9 n% h$ z2 A( S
   
if (ERROR_SUCCESS==nRel)/ N% l) ?2 t: B; [& f/ n& p
    {/ _+ h8 i7 ^: K' o. V
        
//输出网卡信息5 Q+ o1 @2 i& r; y
        output(pIpAdapterInfo);
# C# `6 Y4 d% f; p" d) }' y2 Z! r    }0 V0 ~/ z& i0 x6 v& i- d
   
//释放内存空间; x" n, B: P) ?$ M+ T, i( I1 K
    if (pIpAdapterInfo)+ k; q- ^( |# ]/ ~3 H3 c! V0 Q
    {6 |1 \- X' _% ~) n% ?( V% j
        delete pIpAdapterInfo;
  T, b. G; @+ ?9 z8 i" ~3 s3 ]- G3 @    }
! [( y" u7 i* n8 g: m    getchar();
6 M( i2 \0 {& {, s7 z   
return 0;: U* B1 s% R+ _3 n" A! M) m
}
2 G! G( p& I! t9 u' Z$ E* O2 h0 o6 q: S5 o
///函数作用,输出网卡信息2 t: U# p/ r" z, K! l, }  A: z
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
9 t6 J- N- c- L2 k8 i- P6 c{! D6 b: f+ I( i
   
//可能有多网卡,因此通过循环去判断
/ Y2 o3 d# n: ?; a  J5 f1 l9 G
    while (pIpAdapterInfo)1 S; w& x! t9 {- {9 I3 a8 C6 a5 n
    {
- T" K& F- _% c' ~" Y        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;' L8 y# a6 l, _4 |" d
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
+ \8 W# y& |  J/ |        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;" W6 p& o/ Z- E+ t  z6 c9 D
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)# u8 h/ Z) \( G1 K& Z/ z5 V
        
if (i==pIpAdapterInfo->AddressLength-1)
+ g4 F8 B# k  N0 p# q        {
. B4 S, p0 v. S% H            printf(
"%02x\n", pIpAdapterInfo->Address);
2 e* Y! `" {# _        }( k6 H4 C5 a( Z/ ?2 [
        
else
. G8 W9 T$ O: A        {- ?, Y( J0 j$ E* d( f9 _
            printf(
"%02x-", pIpAdapterInfo->Address);2 ]  M1 u9 _9 e- g+ O; _1 ?
        }& G# R1 y$ O7 N# z% e3 E
        cout
<<"网卡IP地址如下:"<<endl;
. Z+ {  B0 o; J        
//可能网卡有多IP,因此通过循环去判断
' r5 T8 @: o7 k3 ^# e- a! e
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
- S' S4 F) Z( d) I8 R/ s& @- W        
do
4 z, G# q$ K7 I. \) ?* W        {
2 W' h+ K- N* w2 L+ c* A; T+ M            cout
<<pIpAddrString->IpAddress.String<<endl;  r! S( O0 l6 _6 S
            pIpAddrString
=pIpAddrString->Next;+ G5 w8 h8 {4 p( ~# ?
        }
while (pIpAddrString);
8 ^+ Z; G" L# N4 d0 I        pIpAdapterInfo
= pIpAdapterInfo->Next;* s5 m" o1 d$ j5 F- @
        cout
<<"*****************************************************"<<endl;( L& E+ n2 L2 E4 h# B! W
    }
& r9 G  C# F0 B0 Z* L: c( m   
return;
8 e. W% P8 t1 V/ x; h) I0 x}

& q' F7 m+ d8 h- Q
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了