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

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

[复制链接]

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

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

admin 楼主

2017-10-11 21:24:30

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

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

x

0 x7 _2 U# D6 g3 K6 c3 T( y4 ^9 ?1 h  y% N  n

- W# {; b# o. N: x' }9 A: \5 R// 头文件包含
' R, P. W  ^7 t8 ^: N$ j! {
#include "stdafx.h"% V" a* c- G& v+ O7 m+ F
#include
<WinSock2.h>& K9 ~, a# _8 n( X0 O- X: {
#include
<Iphlpapi.h>) P; H- H( ~% ~, Y/ ^+ S& R1 d, U) Q; Y9 Q
#include
<iostream>8 k4 l0 l8 Y0 T/ J1 z
using namespace std;
2 N% I3 q9 B1 o+ {" v) a; y& f
// 函数声明
& H+ b- @3 A# ^8 R: `( q, S
void output(PIP_ADAPTER_INFO pIpAdapterInfo);; n9 d+ ^" q8 J. u: l2 p5 o0 U, i
// 程序入口: \$ V" J+ ?; d  F' C# u
int _tmain(int argc, _TCHAR* argv[])8 _0 m! Q) r# M7 M
{
; o. f1 ~! V( o5 \$ L: V+ k   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
( g/ U/ @, [/ l9 i& l  e
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();4 F$ V9 h+ d5 b: R) n9 W
   
//得到结构体大小,用于GetAdaptersInfo参数
  u# i! l$ x2 f: X
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);' j( ~1 i* X0 M) \
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量$ _; t: K7 w/ v# `2 M# u
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);+ @/ i+ k% V# y' X" [$ b
   
if (ERROR_BUFFER_OVERFLOW==nRel)
9 g% a: d  p  s) E: S* ^3 @7 @    {
( e4 Q: c+ P, |7 n         
//如果函数返回的是ERROR_BUFFER_OVERFLOW  j$ P" ~6 P8 {/ U( @; D5 Y
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
* u+ U3 M; M" A' R        
//这也是说明为什么stSize既是一个输入量也是一个输出量5 p" Y6 w- L/ ?4 o
        
//释放原来的内存空间5 _5 X3 g& ~. x; m5 g- }& r
        delete pIpAdapterInfo;6 w  v2 c8 J0 r: P# {2 U  I
        
//重新申请内存空间用来存储所有网卡信息
8 ]* ^& M$ {' K' U* T6 p9 [% y
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
' L/ [# P) r: p        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量/ K$ S; d; B  c5 O( s
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
, W9 s) b. j1 t7 J9 l9 t    }
6 E3 i: Y8 M4 ]  v- d8 Y   
if (ERROR_SUCCESS==nRel)* w. K0 t- M& s2 P; b
    {$ i0 {; w# @4 y
        
//输出网卡信息  C0 K5 \9 B6 T6 A
        output(pIpAdapterInfo);
) t! [3 }" C( A3 O# V    }
/ I( c& r) R+ ^- X+ q   
//释放内存空间, e% b; k, F- L0 D
    if (pIpAdapterInfo)
$ q# L, w8 J2 {) U. m    {
' M2 a! a, T& c& t$ ^        delete pIpAdapterInfo;, V" i; M7 n5 s- y  K- c) T* ]
    }
5 A: m. j" F& l6 Y    getchar();
' [" F4 [: p/ t; ]   
return 0;6 O; u4 Q5 P! m; |. j* S: \$ a
}4 @5 t/ p- k8 @0 a/ }2 x' [
///函数作用,输出网卡信息
: f4 R% S5 H/ [, \; x( [
void output(PIP_ADAPTER_INFO pIpAdapterInfo). q8 Y! Q, H6 R* {  n
{- e0 z# _9 k9 n5 o) j% L+ M
   
//可能有多网卡,因此通过循环去判断
) u1 u  r& W3 \( G4 ?
    while (pIpAdapterInfo). G7 S4 J4 T1 w
    {
0 V6 z6 f4 y5 P* `6 r        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
. L5 W- x) T, h4 n- z, W( |/ i        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
( G3 }6 ~8 X! }& v9 ?' @        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;. G' S- x9 |& |+ [: m2 |
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)9 _# P, m2 P6 u4 u$ h( w' F+ c
        
if (i==pIpAdapterInfo->AddressLength-1)% f. T1 u  v7 H) S! g4 j
        {+ T0 ]$ Y7 N# e* p. `3 l
            printf(
"%02x\n", pIpAdapterInfo->Address);
4 W( V& Z1 ~1 Z; ~4 i        }
2 v! Q: _6 M6 ^/ ~. J) J        
else
# {& e4 `( q) x8 H! M5 R/ o: @9 x        {- A, v: ~4 J. ^! f8 s4 U$ s
            printf(
"%02x-", pIpAdapterInfo->Address);" _' w6 b" G7 k. ^$ f
        }
5 O+ q& b1 ~8 }! w2 M: q! s        cout
<<"网卡IP地址如下:"<<endl;" b4 S* K, J' o2 _8 [- U
        
//可能网卡有多IP,因此通过循环去判断) q3 e, j; q% h! a% P
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
& ^" _, v* E* Y; Y$ e        
do 0 r  g; ^4 f8 u( ~; F' Y
        {6 a+ |+ y! d1 o! K
            cout
<<pIpAddrString->IpAddress.String<<endl;& U: ]- q- r- v& ?- Z
            pIpAddrString
=pIpAddrString->Next;
0 e) |$ r7 M( E6 {        }
while (pIpAddrString);3 e* c/ s( c. m" f
        pIpAdapterInfo
= pIpAdapterInfo->Next;
7 d  g! n5 C, U. Q  K4 U" W6 i& ^' h& q        cout
<<"*****************************************************"<<endl;
$ N- c* @. R2 K4 s    }- ]+ l3 K) ?1 ~/ `  F( i& p( {" a
   
return;: H, G- @0 b  \  x/ G, M
}

  T  b' A) T2 M5 w4 H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了