Windows Socket 网络编程(五) —— 获取本地主机信息

本文通过C++代码演示了如何获取Windows系统的本地网络配置信息,包括适配器名称、描述、MAC地址、默认网关、IP地址及子网掩码等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//////////////////////////////////////////////// // 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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值