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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x
+ v+ t6 c2 D0 W1 d! w
( g' W  y: F+ F( R4 {* ]
; P$ D( K! }% {
// 头文件包含
. H# W6 l/ e3 |, `- P, l8 e2 ~
#include "stdafx.h"$ b+ `, n8 r: g4 n1 f! ]! Q
#include
<WinSock2.h>
. h4 A; W* t' M#include
<Iphlpapi.h>
/ k& _0 C% E2 G+ k+ V#include
<iostream>
8 W, f' U! H! E2 |& I
using namespace std;
, `7 R( X6 h1 u) A" G# @
// 函数声明: r. \3 |4 d; _. n' k& y- T) M4 _
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
) W: ]) r  z! G: u7 J) g& G; |
// 程序入口4 ]/ L9 `5 r) A6 Z$ L; F8 E2 X
int _tmain(int argc, _TCHAR* argv[])  R2 v2 A7 D% A, I! w
{6 u) K3 g1 c* d
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
2 \( L2 S' T  k7 {8 A
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
4 [* @; T) q  y6 L; [- C6 W   
//得到结构体大小,用于GetAdaptersInfo参数: E8 J4 r' n" f. T1 n0 Q$ {$ p" {
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);7 k9 i+ t; f- D
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
- i* j' {: |* Z: M, R
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);) \7 E. e- O4 @
   
if (ERROR_BUFFER_OVERFLOW==nRel)4 m" a5 g" I9 X4 z
    {
7 H+ y- w( D  m6 Q  X* C         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
& ]! W, k% ~  i& `+ _3 o5 T- c; s9 b    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小3 E9 o0 ~: U9 c# w# M, Q9 p' Q% X, v
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
$ U( y! N& }. \# b% N7 y+ _        
//释放原来的内存空间: F0 Y+ t1 \" w8 z' S1 y
        delete pIpAdapterInfo;
( A8 x: O6 o: h  Q: ~0 Y) @+ J) [        
//重新申请内存空间用来存储所有网卡信息' U; R4 Z8 }6 x+ u8 S
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
3 q0 F1 U; B% j9 a& @" ]        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
. Y& B: d" o0 X5 h
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
8 G1 j$ m  o8 G    }" K) ?+ v. I' C# L1 l0 d, ?1 s
   
if (ERROR_SUCCESS==nRel)9 n* x4 k! u3 B3 m6 C
    {! d7 v/ ?5 _7 c) v# Z
        
//输出网卡信息
7 x3 r! R' g  S1 V$ `6 f
        output(pIpAdapterInfo);" j  J* y* O" {/ T1 ]# r5 J$ S5 d
    }
8 a' ^) E0 @' F5 \. W. z) A* E   
//释放内存空间
9 ]8 _$ t7 G2 J. Q- Z
    if (pIpAdapterInfo)  N' C6 }4 e" N3 F
    {, G) ^8 c6 i" n  ]6 J) X
        delete pIpAdapterInfo;  z  |; T# n9 q5 w8 a( Z8 Y' A2 w
    }
6 e# A9 p, d" Y+ w* u    getchar();
8 b8 J# R  V0 i' {$ V% N9 w0 C4 {   
return 0;, v+ b1 K3 n& P+ V2 u0 c
}
8 _" H  ]4 R2 E# ?5 T9 x
///函数作用,输出网卡信息) k4 T) @( _- o! ?4 u6 N# c
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
  J: W1 _# J- Q9 m+ ^" t{- ]0 Y- Y& a5 ~  S
   
//可能有多网卡,因此通过循环去判断
1 i, y' F) F+ T- |& b9 v+ }8 ?% N
    while (pIpAdapterInfo)) v3 m% s0 O5 f* K$ e0 X
    {
7 v6 F: R1 N+ |- o1 |  J% \, ]        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
* ~( o7 S( W1 O3 J3 c, h* H3 W        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
6 P5 L2 d$ [" m        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
" h/ b+ Z% t, e" l  k; G* T6 ?        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)" X$ b4 _7 U$ S
        
if (i==pIpAdapterInfo->AddressLength-1)
# d( y5 E1 I7 X4 U9 S& u) `        {
0 _* A& Z+ v' ~1 d# D            printf(
"%02x\n", pIpAdapterInfo->Address);- G* ?& k/ @8 W( {9 w; J7 A
        }
  X, M7 ?% M/ F- e  |9 s2 R        
else: b/ Q3 X  Y  Y9 r0 ~
        {
7 q+ n( b, r; R' O4 W- C. w9 w            printf(
"%02x-", pIpAdapterInfo->Address);
0 n& H( u# F  q        }* r( w! |9 z: a' H1 ^/ {7 T0 f
        cout
<<"网卡IP地址如下:"<<endl;
+ y: v7 b/ a& y5 i* J        
//可能网卡有多IP,因此通过循环去判断
( A* I2 I* l" N/ p
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);4 {% D: X( ]" A
        
do
& e# I+ w& ~, k) @, m  B        {
. n* b# e) V. \            cout
<<pIpAddrString->IpAddress.String<<endl;
/ m  V/ ?. ~1 |/ Z            pIpAddrString
=pIpAddrString->Next;
2 b2 `4 Q. T/ J- t6 \# Y        }
while (pIpAddrString);
! ?3 ^6 N0 x: S% S& O$ C4 e        pIpAdapterInfo
= pIpAdapterInfo->Next;8 U/ M* j- ?! k6 ]9 f9 [
        cout
<<"*****************************************************"<<endl;
, B+ U8 X, M" ^* A. d    }
, E0 ]& ^5 {. u* K4 E( j7 {   
return;7 L* n  C; X1 h# K6 _
}

! y# ^; `& [, g2 p; Y0 y- C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了