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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

+ B7 T6 _0 I' `% o) W; ]0 C1 b, \% B+ d
6 y" y- L' m; {# @3 I  n
// 头文件包含
$ q. I7 \$ e. M; \6 h
#include "stdafx.h"9 ^9 p) h8 b: N
#include
<WinSock2.h>) }9 N+ }9 b& H5 }# n0 h
#include
<Iphlpapi.h>
5 m9 y8 X2 ~8 e" D1 E#include
<iostream>
; ?  W' V; _% x, y% F
using namespace std;
' O" l% i4 v. `' |1 l
// 函数声明9 E$ a( F* @6 U8 k9 |; V+ `% K6 P
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
# m5 z, ?! U9 H- Y5 C4 S2 ]$ t6 t
// 程序入口
( Z4 ~4 ^& P8 v: j$ q+ Q
int _tmain(int argc, _TCHAR* argv[])$ @# k  s3 s4 X. ?. ~) c1 P1 ~
{  ?) I8 G! t' q, R( E
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息0 y/ M9 F0 n+ i0 ~3 D) a
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();$ R9 C* ~1 Y; v
   
//得到结构体大小,用于GetAdaptersInfo参数
$ l/ R: ]* Y3 s
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);7 @: F8 g: _- _# h
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量0 w0 G3 Z- b7 |7 D8 l
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);% i, a+ O5 N* ?7 M4 m
   
if (ERROR_BUFFER_OVERFLOW==nRel)
; I5 E9 v4 L& A9 p2 G    {
: B, W6 p/ }4 ~+ D6 u7 @- [* b         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
5 y! d/ E1 T2 c' h    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小" W5 o: k1 a7 Z3 f5 k" g- X2 Q
        
//这也是说明为什么stSize既是一个输入量也是一个输出量3 b, I9 Q7 G" H6 \
        
//释放原来的内存空间2 x4 h6 G4 L/ G% Z9 r) J
        delete pIpAdapterInfo;
+ m; {7 m# s1 ^' W$ g        
//重新申请内存空间用来存储所有网卡信息
5 z$ Q! {, a0 d9 M2 r
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];# `# q8 u" l2 v. [4 ]/ _& B
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
0 f, d3 o; [+ Y; R% C, I
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    5 ~0 A% {" q; P4 [7 q
    }  n& O' H9 ~- v- F3 w" k+ a9 ]
   
if (ERROR_SUCCESS==nRel)" c! f* X9 r3 b. A- u# W* L
    {2 C' M' o8 z! p, E8 z5 }8 w9 y& L3 F
        
//输出网卡信息9 A8 M9 A. ]( b/ I  d) X
        output(pIpAdapterInfo);
7 l: d" V; n4 r3 }8 R    }: m' z) W+ D9 ^0 h* Y- \) ]
   
//释放内存空间- k% h/ ?, }5 U, `" S+ P
    if (pIpAdapterInfo)
" W0 T+ p  X' K+ O- d    {& c! |) R$ {; K& @) N  B. o, J. U! T
        delete pIpAdapterInfo;
( x9 c" T" c' N    }
* d" X& h8 A+ J8 D6 a/ h4 E    getchar();
, m" l8 l+ F1 E. P1 L; M5 u   
return 0;. k  I& W2 Q' \) V
}4 K- }, W- u) G
///函数作用,输出网卡信息4 g" e* ^/ q' s& y/ B
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
: K9 \) j2 n$ F! a; X2 O{3 r9 N% Q3 @1 t8 I
   
//可能有多网卡,因此通过循环去判断3 c' M& a" @, U. v; E" g8 k- n
    while (pIpAdapterInfo)
3 z$ i3 V$ c; C6 q6 W5 w8 Y    {
3 \4 w  ?* j  Q        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
) L1 \5 L' \, i* H$ P9 i: h6 m        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
+ a6 s" a2 X9 e* W        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
1 x% e: s% n3 a# g3 m        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
; X8 N0 s5 B9 [/ B. E1 H        
if (i==pIpAdapterInfo->AddressLength-1)
: Q) A  C, O2 c3 K: N# w        {7 e( m: d1 J* N( E
            printf(
"%02x\n", pIpAdapterInfo->Address);0 K1 I2 |1 Q" O
        }% i+ v9 t! N" c; m: j6 ]. C
        
else& f" b' O7 u5 x
        {( e5 `! P  x2 _9 c& v9 m* p! g
            printf(
"%02x-", pIpAdapterInfo->Address);
+ g2 f% v, J( o        }
: H, _( e* c5 ]  J4 ^( O% @        cout
<<"网卡IP地址如下:"<<endl;
* F& Q. x& A) j& G- f        
//可能网卡有多IP,因此通过循环去判断  @/ Y2 h3 `" w1 |( c' j$ I
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);4 c! S. g7 @% j8 ?7 y) Y
        
do
" |  g0 A% I, {& ~& d        {
. f0 |6 r+ _4 T( ~" p5 m: h            cout
<<pIpAddrString->IpAddress.String<<endl;$ w% t5 @/ T# [1 q
            pIpAddrString
=pIpAddrString->Next;
: K; @2 {6 H8 ~; D$ ~! \        }
while (pIpAddrString);
: l9 Y5 b, Z9 s9 Q9 [" I        pIpAdapterInfo
= pIpAdapterInfo->Next;
, }+ x" M; O8 P- _* w  I# f& [        cout
<<"*****************************************************"<<endl;
( i( ]/ z7 F4 A. C+ H    }
$ l9 N+ [" g2 I" ^, O/ N6 o   
return;
1 }: `' ]! [7 W/ K- N; H}

0 W  d0 U( x2 S$ s6 G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了