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

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

[复制链接]

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

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

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

x
+ z- A$ ^* O, m

, l; v2 ~2 e" e
& @1 @4 d. m& k; u  y// 头文件包含1 L8 K$ V! S4 q9 y& n* W
#include "stdafx.h"! y. O* U0 J* r! R2 C( `/ D
#include
<WinSock2.h>
+ \6 ~" S* m( \- _3 ~& h3 E#include
<Iphlpapi.h>
3 G) Q9 x; v2 l: _" D# C#include
<iostream>! o+ `% ]+ l, \2 C$ H) o  T! f) z
using namespace std;. o2 i4 m- l' W. ~
// 函数声明- v& Z" _" V+ ?: m
void output(PIP_ADAPTER_INFO pIpAdapterInfo);9 h" G7 ^$ o9 D( Y
// 程序入口& z" F; }; c- W5 K4 }
int _tmain(int argc, _TCHAR* argv[])/ P/ O0 O  D4 u
{
$ c- W# A$ b( ~& z: X* f' I8 f   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息9 [3 d. J7 t; G9 ]- d% I% |
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();. I1 P9 d3 ~6 `
   
//得到结构体大小,用于GetAdaptersInfo参数
% M8 D- j/ D: M8 W4 _5 O5 `( h1 D
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
; z1 L3 \, P$ O   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
7 W; ]" B2 i  g0 ~+ x, H, x
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
3 C9 v# a& U, {* Q5 P   
if (ERROR_BUFFER_OVERFLOW==nRel)) E0 ]8 h# a% ~' r* l  X! {8 J
    {
0 T1 i2 E! Z8 V6 u8 u         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
! \  O7 y; D+ M# V9 m    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小5 e0 L, ]- _0 M# [
        
//这也是说明为什么stSize既是一个输入量也是一个输出量2 I* F0 X2 j% K+ Q
        
//释放原来的内存空间6 i# H8 B" o* M2 \
        delete pIpAdapterInfo;& x) f6 M( L. s5 p3 V' H4 Q
        
//重新申请内存空间用来存储所有网卡信息
0 r: ~8 O. Z- N4 O
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];. k3 c3 P- m$ i
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量  |7 U0 X  I# k6 H
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
6 c4 M* U& A* X8 c    }: v- ]' J5 i9 Y+ E* ~: Q
   
if (ERROR_SUCCESS==nRel)5 V" B6 Y' ~7 a/ e
    {: E/ ^  g2 i2 n8 L' z' ?, R
        
//输出网卡信息
  |8 D0 H$ F5 F. C5 \) W; l
        output(pIpAdapterInfo);$ D9 X3 t- r$ D3 L' Y  j
    }
' ^% s; m, L' ~& c" v; N) B. l$ s   
//释放内存空间3 p/ t; t2 L, T+ l$ ?( I9 G: p* n
    if (pIpAdapterInfo)
& T! L# g4 m# Q6 }+ Z    {6 S$ Z; O7 @$ i& G0 E, p
        delete pIpAdapterInfo;" H# z* @) K7 `! ^/ B- g1 @* i: E
    }& s5 }5 u  O; s6 l  |
    getchar();
. X, w7 q: Z# Z   
return 0;6 o8 A  A+ h1 m6 c& X, K
}
4 j; p) w. D, N* Z
///函数作用,输出网卡信息
  ~' W+ P5 f! u4 H# _
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
, \. v$ d9 v2 T" [0 g{' d8 t* A+ X- N' g/ m3 ~! A' F
   
//可能有多网卡,因此通过循环去判断7 V" F' d' F# Q- t) O
    while (pIpAdapterInfo)
, X% x) F) L0 f, }8 z3 E1 ]6 ~% m    {
) v$ e# T8 o" j# h        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;6 D2 X9 s- [6 o* R$ o- m
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;' P0 s6 B+ f$ l9 `4 k7 o
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;' N" A# i5 K" a" D; u
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)7 i4 b- U0 V' G+ }. @- v1 w) \9 E
        
if (i==pIpAdapterInfo->AddressLength-1)+ u6 t) I# s0 l
        {
0 D. u2 C& u( N- ?9 I% t            printf(
"%02x\n", pIpAdapterInfo->Address);3 v9 |6 d3 V7 G* _4 o8 K. |
        }+ }1 a# N. h2 o
        
else, J* W, E; {% `" D6 O1 }
        {. o/ p8 D1 }; _* D4 v& l5 X
            printf(
"%02x-", pIpAdapterInfo->Address);
( R, b# d6 d0 l7 Y# w; n0 d        }
# I4 w7 ]8 A; G- c* b1 r0 A        cout
<<"网卡IP地址如下:"<<endl;
, _; y5 K" N' v; o& \* |" M, P        
//可能网卡有多IP,因此通过循环去判断  u4 q0 b6 m! O; S) R
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
  m3 M5 ^& @9 ]3 d6 R+ ]6 @: N% D! p4 }        
do
* M. C6 A7 j) z, b        {) N% ?4 U3 b; N6 ^8 G
            cout
<<pIpAddrString->IpAddress.String<<endl;7 I4 p% t( z' m+ ^" E
            pIpAddrString
=pIpAddrString->Next;  z% I5 T; {) ^6 M$ z
        }
while (pIpAddrString);! k# H8 G! k  s  a' U; J
        pIpAdapterInfo
= pIpAdapterInfo->Next;- ]  p7 ?9 U) H( f/ s/ X/ ^1 i* }
        cout
<<"*****************************************************"<<endl;
0 V1 g& Q" r# l1 y5 A+ o/ R5 b    }
, p. e/ E1 `* M3 S4 D' @( L: I- n   
return;
/ ~+ t6 g) w" l2 f# l}
' R, c6 S" R% s7 V, f4 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二次开发专题模块培训报名开始啦

    我知道了