代码片段:获取系统所有IP
作者:BlogUpdater |
时间:2017-11-05 |
浏览:4147 |
评论已关闭 条评论
在Windows系统中,可以支持多个网卡,比如有线的以太网卡,无线网卡,虚拟网卡等。如下图所示:

而一个网卡,其IP地址可以是DHCP自动分配,也可以手动设定。在手动设定模式下,还可以添加多个IP地址。如下图所示:

那么,如何通过代码的方式来获取所有的这些IP地址呢?废话少说,直接上代码吧!
bool ShowAllIpAddr()
{
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
PIP_ADAPTER_ADDRESSES pAddresses_start = NULL;
IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
ULONG outBufLen = 0;
DWORD dwRetVal = 0;
char buff[100];
DWORD bufflen=100;
int i;
GetAdaptersAddresses(AF_UNSPEC,0, NULL, pAddresses,&outBufLen);
pAddresses = (IP_ADAPTER_ADDRESSES*) malloc(outBufLen);
pAddresses_start = pAddresses;
if ((dwRetVal = GetAdaptersAddresses(AF_INET,GAA_FLAG_SKIP_ANYCAST,NULL,pAddresses,&outBufLen)) == NO_ERROR)
{
while (pAddresses != NULL)
{
if (pAddresses->OperStatus == IfOperStatusUp && (pAddresses->IfType != IF_TYPE_SOFTWARE_LOOPBACK))
{
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = pAddresses->FirstUnicastAddress;
for (i = 0; pUnicast != NULL; i++)
{
if (pUnicast->Address.lpSockaddr->sa_family == AF_INET)
{
sockaddr_in *sa_in = (sockaddr_in *)pUnicast->Address.lpSockaddr;
// Dealing with ip address in structure sa_in
}
pUnicast = pUnicast->Next;
}
}
pAddresses = pAddresses->Next;
}
}
else
{
// Error handling
return false;
}
free(pAddresses_start);
return true;
}
代码解析:
以上代码结构简单,首先调用GetAdaptersAddresses获取系统所有网卡,然后循环每个网卡。对于每个网卡,通过FirstUnicastAddress成员获取该网卡的起始IP,然后循环获取该网卡的所有IP。注意,这里仅获取已启用网卡的IP地址列表并过滤掉了本地回环地址。
如需转载,请注明来自:拓扑梅尔智慧办公平台 | TopomelBox 官方站点
相关推荐
- 如何查询任务栏的属性
- Posted on 10月17日
- 练习题答案:函数指针转换
- Posted on 12月05日
- 第 460 期:没有人想要一个巨大的 Windows 11 开始菜单
- Posted on 01月29日
- 第 320 期:介绍一种方法来解锁 Windows 11 25H2 的隐藏功能
- Posted on 11月16日



评论已关闭。