Windows Socket 网络编程(五) —— 获取本地主机信息
2011-05-06 17:15
417 查看
//////////////////////////////////////////////// // 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; }
相关文章推荐
- 《visual c#.net网络核心编程》学习笔记系列之:获取本地主机信息
- Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip 、获取本地主机的名字
- UNIX环境编程-----Unix编程实例----获取本地主机IP地址等信息
- Linux 网络编程之通过IP或者主机名获取信息
- Java网络编程 获取本地主机名称和地址
- Linux 网络编程基础(2)-- 获取主机信息
- 第10章:网络编程:获取主机信息
- Java获取网络主机信息
- C#小技巧系列之四:获取本地网络信息
- 本地计算机网络信息的获取
- linux编程获取网络信息
- java网络编程----------获取Socket信息
- os环境下,使用bsd实现echo server并如何获取本地网络信息
- C#小技巧系列之四:获取本地网络信息
- 网络编程——获取主机名称和对应的ip地址
- Qt-获取主机网络信息之QNetworkAddressEntry
- Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip
- 本地计算机网络信息的获取
- C#小技巧系列之四:获取本地网络信息
- 五种获取本地网络信息的方法(QHostInfo和QNetworkInterface)