// LocalHostInfo.cpp文件 #include <windows.h> #include <stdio.h> #include "Iphlpapi.h" #pragma comment(lib, "Iphlpapi.lib") #pragma comment(lib, "WS2_32.lib") / // 全局数据 u_char g_AdaptersName[MAX_ADAPTER_NAME_LENGTH + 4]; u_char g_Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; u_char g_ucLocalMac[8]; // 本地MAC地址 DWORD g_dwGatewayIP; // 网关IP地址 DWORD g_dwLocalIP; // 本地IP地址 DWORD g_dwMask; // 子网掩码 BOOL GetGlobalData() { //PIP_ADAPTER_INFO 包含了本机计算机网络适配器的信息 PIP_ADAPTER_INFO pAdapterInfo = NULL; ULONG ulLen = 0; // 为适配器结构申请内存 ::GetAdaptersInfo(pAdapterInfo,&ulLen); //该函数从堆中分配一定数目的字节数 pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR, ulLen); // 取得本地适配器结构信息 if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS) { printf(" ************************ 本地主机信息 ************************/n/n"); while( pAdapterInfo != NULL ) { memcpy(g_AdaptersName, pAdapterInfo->AdapterName, MAX_ADAPTER_NAME_LENGTH + 4); printf(" 适配器名称: %s /n", g_AdaptersName); memcpy(g_Description, pAdapterInfo->Description, MAX_ADAPTER_DESCRIPTION_LENGTH + 4); printf(" 适配器描述: %s /n", g_Description); //本机MAC地址 in_addr in; memcpy(g_ucLocalMac, pAdapterInfo->Address, 8); u_char *p = g_ucLocalMac; printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X /n", p[0], p[1], p[2], p[3], p[4], p[5]); /************************此适配器网关列表************************/ g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String); in.S_un.S_addr = g_dwGatewayIP; printf(" Default Gateway : %s /n", ::inet_ntoa(in)); //当有多个的时候 PIP_ADDR_STRING pAddrString = pAdapterInfo->GatewayList.Next; while(pAddrString != NULL) { g_dwGatewayIP = ::inet_addr(pAddrString->IpAddress.String); in.S_un.S_addr = g_dwGatewayIP; printf(" ------------- %s /n", ::inet_ntoa(in)); } /************************此适配器IP列表************************/ g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String); in.S_un.S_addr = g_dwLocalIP; printf(" IP Address : %s /n", ::inet_ntoa(in)); pAddrString = pAdapterInfo->IpAddressList.Next; while(pAddrString != NULL) { g_dwLocalIP = ::inet_addr(pAddrString->IpAddress.String); in.S_un.S_addr = g_dwLocalIP; printf(" ------------- %s /n", ::inet_ntoa(in)); } /************************此适配器子网掩码************************/ g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String); in.S_un.S_addr = g_dwMask; printf(" Subnet Mask : %s /n", ::inet_ntoa(in)); //下一个适配器 pAdapterInfo = pAdapterInfo->Next; printf("/n -------------------------------------------------------------------------- /n", ::inet_ntoa(in)); } } return TRUE; } int main() { // 获取全局数据 GetGlobalData(); getchar(); return 0; }