设为首页 加入收藏
首页 资讯 vxWorks VMEbus 硬件 开源系统 大杂烩 EBook BBS
我要投稿

TOP

如何在windows下获取网卡的MAC地址?
2011-05-14 16:13:19 来源:www.vxdev.com 作者:frank 【 】 浏览:214次 评论:0

Q:如何在windows下获取网卡的MAC地址?
A:1. 直接调用dos命令ipconfig.exe /all获取文本信息,然后对结果进行解析。
   2. 调用windows的API函数来实现。 下面为调用GetAdaptersInfo()的实现例子,需要有IPHlpAPI.lib和IPHlpAPI.dll。
      IPHlpAPI.dll在windows目录下有,.lib文件和.h文件从windows SDK中可获取。

 

// 下面结构体从IPHlpAPI.h和IPTypes.h中获取的

typedef struct {
    char String[16];
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;


typedef struct _IP_ADDR_STRING {
    struct _IP_ADDR_STRING* Next;
    IP_ADDRESS_STRING IpAddress;
    IP_MASK_STRING IpMask;
    DWORD Context;
} IP_ADDR_STRING, *PIP_ADDR_STRING;

typedef struct _IP_ADAPTER_INFO
{
    struct _IP_ADAPTER_INFO* Next;
    DWORD   ComboIndex;
    char    AdapterName[256 + 4];
    char    Description[128 + 4];
    UINT    AddressLength;
    BYTE    Address[8];
    DWORD   Index;
    UINT    Type;
    UINT    DhcpEnabled;
    PIP_ADDR_STRING  CurrentIpAddress;
    IP_ADDR_STRING   IpAddressList;
    IP_ADDR_STRING   GatewayList;
    IP_ADDR_STRING   DhcpServer;
    BOOL             HaveWins;
    IP_ADDR_STRING   PrimaryWinsServer;
    IP_ADDR_STRING   SecondaryWinsServer;
    time_t           LeaseObtained;
    time_t           LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

 

extern "C" DWORD WINAPI GetAdaptersInfo( PIP_ADAPTER_INFO pAdapterInfo,PULONG pOutBufLen);

//
// need Link with IPHlpAPI.lib
//
int main()
{


    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    int i = 0;

    pAdapterInfo = (IP_ADAPTER_INFO *)malloc( sizeof(IP_ADAPTER_INFO) );
    ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

    // Make an initial call to GetAdaptersInfo to get
    // the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
    {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
    }

    if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
    {
        pAdapter = pAdapterInfo;
        while (pAdapter)
        {
        //  printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
            printf("\tDescription: \t%s\n", pAdapter->Description);
            printf("\tPhysical Addr: \t");
            for(i=0;i<6;i++)
            {
                if(pAdapter->Address[i] < 0x10)
                {
                    printf("0%x ", pAdapter->Address[i]);
                }
                else
                {
                    printf("%x ", pAdapter->Address[i]);
                }
            }
            printf("\n\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
            printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
            printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);

            if (pAdapter->DhcpEnabled)
            {
                printf("\tDHCP Enabled: \tYes\n");
                printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
                printf("\tLease Obtained: \t%ld\n", pAdapter->LeaseObtained);
            }
            else
            {
                printf("\tDHCP Enabled: \tNo\n");
            }

            if (pAdapter->HaveWins)
            {
                printf("\tHave Wins: \tYes\n");
                printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
            }
            else
            {
                printf("\tHave Wins: \tNo\n");
            }

            printf("\n");

            pAdapter = pAdapter->Next;
        }
    }
    else {
        printf("Call to GetAdaptersInfo failed.\n");
    }

//  Sleep(2000);

    return 0;
}

您看到此篇文章时的感受是:
Tags:windows mac 地址 GetAdaptersInfo 责任编辑:frank
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇 如何在PHP中调用自己编写的DLL库.. 下一篇分布式系统中为何要在一些结构体..

评论

帐  号: 密码: (新用户注册)
表  情:
内  容:

相关栏目

最新文章

图片主题

热门文章

推荐文章

相关文章

广告位