代码片段:获取系统所有IP
作者:BlogUpdater |
时间:2017-11-05 |
浏览:3759 |
评论已关闭 条评论
在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地址列表并过滤掉了本地回环地址。
如需转载,请注明来自:Topomel Box
相关推荐
- 为什么不应该在WM_KILLFOCUS时进行数据校验
- Posted on 02月09日
- VS2019: 新的边界检查规则
- Posted on 05月23日
- Windows将鼠标单击转换为双击的原理
- Posted on 11月29日
- 亲测:华为老爷机安装谷歌框架
- Posted on 12月17日
评论已关闭。