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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

2 P3 l( F# ~3 Q# [1 {4 ]1 g' ?( ?
1 N3 L8 R7 w2 p0 _, l1 A8 l" b3 O  S5 V1 X3 `6 K* i' Y% l
// 头文件包含# m4 z. f. b( K6 m  @, Y& i
#include "stdafx.h"
0 ]5 c0 J3 b) N, F' O) N; L9 T! d#include
<WinSock2.h>2 j9 t. k# D/ h9 f/ q1 ~7 }
#include
<Iphlpapi.h>
! ~8 ^7 t. ]9 q9 f#include
<iostream>
' d. y% U% V1 F: D7 l
using namespace std;
" `: t/ y0 j- s7 I2 ^. J4 m
// 函数声明6 l; r: T! S/ O4 h: L4 J
void output(PIP_ADAPTER_INFO pIpAdapterInfo);' Z0 F! }) X% C3 _; g
// 程序入口; U3 T4 I- F9 ?; v$ |6 Y4 l
int _tmain(int argc, _TCHAR* argv[])
- g2 v4 a0 E9 l5 b+ ^+ H) b$ n& N{& b% t3 _9 Q2 Z' G& @: p
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
8 D6 S# g7 m! P, }0 p& G$ f" {4 |4 W' d
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();4 e$ x, C5 O  k+ \
   
//得到结构体大小,用于GetAdaptersInfo参数" A1 g5 ?8 t: F  x6 G
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);  X1 H3 r* L+ p2 N& Q* S
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量+ l* K& x: }6 L) |( U- s* Y+ @' ~
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
9 A- d# _4 q/ [8 G0 N   
if (ERROR_BUFFER_OVERFLOW==nRel)1 I/ Y# Q( P; r8 ^  O4 v& {; K! Q3 j
    {4 u3 J& X1 Z7 V( x$ N/ r/ ^% s
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
+ \) f" b2 w8 `    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
) [/ r% w! \, V& e        
//这也是说明为什么stSize既是一个输入量也是一个输出量/ o/ w# n. m' M" K
        
//释放原来的内存空间
! ]2 K/ R' Z+ }8 Z3 d- R0 V2 w. P
        delete pIpAdapterInfo;3 F6 h6 _  |# S: w8 B- y' z  K
        
//重新申请内存空间用来存储所有网卡信息
3 N' R$ P+ _, ?1 K6 ]5 q
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
* t# {/ y( _# O/ L1 M3 A. ^  B5 J        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
  D  j+ z, j3 ], V2 W# Y
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
' g' B# \5 u$ y0 t$ H5 Z4 V1 F    }
6 E$ b  r! Z8 G8 V" K   
if (ERROR_SUCCESS==nRel)4 X" e4 @3 ^7 t5 ]( S6 d3 `
    {
' k/ |6 D& R4 S' l& E        
//输出网卡信息% V4 c3 _& R' t# d0 ?2 f9 y
        output(pIpAdapterInfo);
& {* _, h8 H' A7 N3 z) ?    }6 R5 p, e; J/ r4 W3 u" z3 l% M
   
//释放内存空间1 F/ a9 `1 f4 q/ x- s
    if (pIpAdapterInfo)
9 _9 b5 _+ U, K- d; F4 l7 h    {) J  P8 {1 Y! `& b1 Y
        delete pIpAdapterInfo;- @; Q& n; Q0 o. @7 U" b
    }
& Q- c# B9 W( h, e; y    getchar();
' P* E$ B0 I; g. P   
return 0;
& K$ \) K8 u4 [2 M}/ A! R! ^2 L! T) M: `2 g1 ]+ S
///函数作用,输出网卡信息7 y9 y2 B, m* q- p& \. g
void output(PIP_ADAPTER_INFO pIpAdapterInfo)* H( `# Z' {/ f3 y. a
{3 ?" _% |4 q5 J3 V: I
   
//可能有多网卡,因此通过循环去判断5 {# ^" b' R9 ~+ [3 q8 A# q& @+ f* X
    while (pIpAdapterInfo). u8 Z: I1 t' |- f0 k
    {
8 z8 p2 T% J" T8 a3 R        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;- p- w* i* w3 U2 [) ?1 v/ U
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;$ f- _1 ^1 h# _
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
3 O" }- s& `( F* S( @+ D6 A2 s        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)8 s, x' r4 c  u- o0 S: `& W
        
if (i==pIpAdapterInfo->AddressLength-1)
. b) m, i+ b" Y        {
8 o5 |) r" K0 w            printf(
"%02x\n", pIpAdapterInfo->Address);
* [; w! m5 \6 V$ m        }
* E; j1 @% `7 g4 k        
else
: d7 ^- C1 _7 R2 W# K& P        {
4 g$ w$ K6 g$ _9 x! W# e! o            printf(
"%02x-", pIpAdapterInfo->Address);8 R8 H/ D+ M% X6 w3 q1 R
        }2 Z8 M  O' z! `, H% b
        cout
<<"网卡IP地址如下:"<<endl;4 @& H  m+ Z* L! K( H' K: U
        
//可能网卡有多IP,因此通过循环去判断# B2 c( p% D/ T1 a, y; K7 U7 m+ A
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);3 L7 r- C$ L1 T: S5 e
        
do ' u0 {. }3 w/ u& G$ k1 n/ X
        {
, B. y8 o: ], ?) q& A            cout
<<pIpAddrString->IpAddress.String<<endl;3 F+ U9 O2 P. N- _9 [
            pIpAddrString
=pIpAddrString->Next;2 G1 s% e, r: s3 r5 W
        }
while (pIpAddrString);
, P2 ]' ]  D2 L9 O+ t9 H# L- l) ~( @4 O4 x        pIpAdapterInfo
= pIpAdapterInfo->Next;( R; g$ ~0 j. q% Y
        cout
<<"*****************************************************"<<endl;+ D# c# ~- x" q; y* Y  Y' u% j. d/ J( A( n
    }
+ y% y/ @4 |  ^& ?, o   
return;3 T7 z/ c! J! n
}

6 Z& ~+ M% i5 Q! O! d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了