C++获取本机MAC,IP,MASK地址的方法

2020-01-06 13:02:33丽君
易采站长站为您分析C++获取本机MAC,IP,MASK地址的方法,主要通过IPHLPAPI.lib调用相关函数实现该功能,是非常实用的技巧,需要的朋友可以参考下      

本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,。具体方法如下:

 

复制代码 #include "InitSock.h"  
#include <stdio.h>  
  
#include <iphlpapi.h>  
#pragma comment(lib, "IPHLPAPI.lib")  
  
u_char g_ucLocalMac[6];  
DWORD g_dwGatewayIP;  
DWORD g_dwLocalIP;  
DWORD g_dwMask;  
  
BOOL GetGlobalData()  
{  
    PIP_ADAPTER_INFO pAdapterInfo = NULL;  
    ULONG ulSize = 0;  
    //为结构申请内存  
    ::GetAdaptersInfo(pAdapterInfo, &ulSize);  
    pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR, ulSize);  
    if ( ERROR_SUCCESS  == ::GetAdaptersInfo(pAdapterInfo, &ulSize))  
    {  
        if (pAdapterInfo != NULL)  
        {  
            memcpy(g_ucLocalMac, pAdapterInfo->Address, 6);  
            g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String);  
            g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);  
            g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String);  
        }  
    }  
    //in_addr表示IP的结构  
    in_addr in;  
    in.S_un.S_addr = g_dwLocalIP;  
    printf("  IP Address:%-30sn", ::inet_ntoa(in));  
  
    in.S_un.S_addr = g_dwGatewayIP;  
    printf("  Gateway Address:%-30sn", ::inet_ntoa(in));  
  
    in.S_un.S_addr = g_dwMask;  
    printf("  MASK Address:%-30sn", ::inet_ntoa(in));