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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

% {6 F! G$ |7 s% k
& q+ b* J; E# x/ ^$ Y# i, h9 _5 k* n6 u  \
// 头文件包含
( T5 w5 f. Q& z  x& g& E  q) j+ f
#include "stdafx.h"
+ b" Y7 ~. a! C9 o2 D#include
<WinSock2.h>' F' z! o& D" u( ^8 w1 A
#include
<Iphlpapi.h>( h. S$ J2 c. G; F: r$ l' N' `# f$ M
#include
<iostream>
9 Q* S1 }; m  m- y
using namespace std;
" D- o. n' b- @) {
// 函数声明9 S8 p& Z2 K  |5 K% H% }( ^
void output(PIP_ADAPTER_INFO pIpAdapterInfo);! S% q$ b# \9 l& i* ~
// 程序入口
3 e: {, N/ |3 L# t# n4 ]$ b; l) O
int _tmain(int argc, _TCHAR* argv[])
9 G4 {9 H0 m. l$ n% e, b) x{
( z) S5 S6 q- H# z   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
5 ?: l3 h3 ^2 G
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
  c, L  A. P% a2 s- m0 f   
//得到结构体大小,用于GetAdaptersInfo参数# `1 }9 W# J. ]& J9 D# U
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);8 c0 v, n5 N# X. I: b/ z4 J6 I( y
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量% x# W. P( r( g- S9 ?5 G
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
0 A' v$ J/ [3 M) Y; J; |   
if (ERROR_BUFFER_OVERFLOW==nRel)
2 T& V3 m9 J. }6 E( w( X7 [    {9 {. W6 Z/ a- d( a( l, u% `1 k
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
" s4 B# A3 ]; l3 D    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
* H# d. M0 o: T) _, h' _# u        
//这也是说明为什么stSize既是一个输入量也是一个输出量
8 B1 I- ~+ k; t* l        
//释放原来的内存空间9 Q8 |% T. A. Y  |& G
        delete pIpAdapterInfo;
* f4 u: b6 |2 V' U4 J        
//重新申请内存空间用来存储所有网卡信息
6 m0 [( _; T% _
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
  Y! j; o2 }/ [1 _        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量0 o2 |' l/ g: w% R) g/ v% a
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
- V, S' W. M* o* u    }
1 ?8 D! E- U6 b. @6 G/ p; J; J& X   
if (ERROR_SUCCESS==nRel)
: K/ T) X" Z& C1 x( p3 M    {
2 A/ [, C4 Y: ~) `$ g; x        
//输出网卡信息
7 P' O( k9 \$ x% ~  @* l
        output(pIpAdapterInfo);$ }$ d# v" p" W- i
    }1 X$ T9 C1 J3 g6 J+ q+ N
   
//释放内存空间
9 r* j; F/ l1 z& }; k/ ?' H1 X
    if (pIpAdapterInfo)
! _2 `8 z: `8 `5 m    {8 Z0 p/ l# L) ^9 m6 |
        delete pIpAdapterInfo;
: O8 z* a  O& O8 X5 G    }
6 y0 {( d6 d! s8 Z: L* v! b5 |1 m    getchar();
* t6 |( t1 [$ k+ l   
return 0;
/ a# B0 P0 Q# {' X}
5 e, ?  c! E0 h9 d( X( y3 k
///函数作用,输出网卡信息
. [0 U! H" W5 Z, `) J8 A
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
$ \. ?6 r6 s8 u" O1 j; b) p{
/ i( Q& x' k' m/ H0 \( X   
//可能有多网卡,因此通过循环去判断
$ J5 k' v# V/ ?/ s( H
    while (pIpAdapterInfo)' k* k# r$ ~- m9 r2 S) {0 D6 T
    {0 Z% ?# r( O. D0 U
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;2 f  E. M: l6 p- o/ B
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;8 x! |( z$ R% f8 \4 A3 W0 j
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;; p  j' l/ x) [+ n
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)7 D1 [, H+ d$ [' C9 `
        
if (i==pIpAdapterInfo->AddressLength-1)# ?  k* s# F) n  @4 ?  a
        {( `8 W4 [$ c0 S3 V) [
            printf(
"%02x\n", pIpAdapterInfo->Address);6 C3 i9 r3 `# h
        }& G4 Z9 h2 B; ~, z2 H' f7 j4 T4 P
        
else# i$ I+ x6 P! k, g+ e4 E
        {
: K& t/ R7 m, O; s" D* b7 |            printf(
"%02x-", pIpAdapterInfo->Address);. L. n: j* h. r1 D. n
        }
. T5 t8 i3 M# X  A4 a% ]        cout
<<"网卡IP地址如下:"<<endl;5 @) z5 d' q4 S* c% o6 o
        
//可能网卡有多IP,因此通过循环去判断) n7 ]" ]# Z) m4 y1 d' Z8 V  g
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
, K4 f( f: }+ d4 q. ]        
do 4 C* ]& T/ _0 S: |
        {: D, O1 o' ?! P; F
            cout
<<pIpAddrString->IpAddress.String<<endl;& c0 a6 O6 v3 V: i- a
            pIpAddrString
=pIpAddrString->Next;
/ |% u0 S$ z1 b7 ~) g7 d( |( j        }
while (pIpAddrString);
7 r' |- \9 G) V        pIpAdapterInfo
= pIpAdapterInfo->Next;5 i' B/ K- o0 o/ n* b4 S' L9 Z
        cout
<<"*****************************************************"<<endl;
1 p1 d% v# B: I  {# \' @+ Y% w    }
+ Y- T0 y0 V+ G) |/ p( ?) B$ w8 f   
return;
" h  F" D4 Z. F) s* {6 t}
  S( ?- N% q! V1 i
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了