PLM之家-上海点团信息科技有限公司工业4.0数字化软件官方知识管理平台

查看: 516|回复: 0

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

[复制链接]

2014

主题

3196

帖子

6万

积分

管理员

PLM之家mildcat

Rank: 9Rank: 9Rank: 9

积分
60430
发表于 2017-10-11 21:24:30 | 显示全部楼层 |阅读模式

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

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

x



// 头文件包含
#include "stdafx.h"
#include
<WinSock2.h>
#include
<Iphlpapi.h>
#include
<iostream>
using namespace std;
// 函数声明
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
// 程序入口
int _tmain(int argc, _TCHAR* argv[])
{
   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
   
//得到结构体大小,用于GetAdaptersInfo参数
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
   
if (ERROR_BUFFER_OVERFLOW==nRel)
    {
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
        
//释放原来的内存空间
        delete pIpAdapterInfo;
        
//重新申请内存空间用来存储所有网卡信息
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
    }
   
if (ERROR_SUCCESS==nRel)
    {
        
//输出网卡信息
        output(pIpAdapterInfo);
    }
   
//释放内存空间
    if (pIpAdapterInfo)
    {
        delete pIpAdapterInfo;
    }
    getchar();
   
return 0;
}
///函数作用,输出网卡信息
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
{
   
//可能有多网卡,因此通过循环去判断
    while (pIpAdapterInfo)
    {
        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
        
if (i==pIpAdapterInfo->AddressLength-1)
        {
            printf(
"%02x\n", pIpAdapterInfo->Address);
        }
        
else
        {
            printf(
"%02x-", pIpAdapterInfo->Address);
        }
        cout
<<"网卡IP地址如下:"<<endl;
        
//可能网卡有多IP,因此通过循环去判断
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
        
do
        {
            cout
<<pIpAddrString->IpAddress.String<<endl;
            pIpAddrString
=pIpAddrString->Next;
        }
while (pIpAddrString);
        pIpAdapterInfo
= pIpAdapterInfo->Next;
        cout
<<"*****************************************************"<<endl;
    }
   
return;
}

上海点团信息科技有限公司,承接NX,CATIA,CREO等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施开发培训,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | QQ关联注册

本版积分规则


<

QQ|小黑屋|手机版|Archiver|PLM之家-工业软件数字化驱动之家-国产自主软件推进者 ( 沪ICP备13003373-3

GMT+8, 2018-7-17 13:58 , Processed in 0.125231 second(s), 27 queries .

快速回复 返回顶部 返回列表