如何获取局域网中所有的IP地址和关联的主机名?
最佳答案
要获取接口(interface)和 IP 地址列表,请使用 getifaddrs()
。
使用 ifa_addr->sa_family == AF_INET
搜索接口(interface)
IP 地址在 sin_addr.s_addr
中。
然后您可以使用 gethostbyaddr()
查找该 IP 地址的 DNS 名称。
更新:
有人向我指出,OP 可能询问的是发现其他主机,而不是本地计算机上的接口(interface)地址。
没有可靠的方法来发现局域网中的其他机器,但有一些技巧。
Ping 方法:使用 ping 实用程序(或等效程序)ping 本地广播地址,然后查看响应者。可以通过如上所示列出接口(interface)来找到广播地址。我相信 ICMP 在 OSX 下不需要 root 权限。请注意,许多系统可能禁用了 ICMP ping 或设置了防火墙,因此您只会收到来自非隐身系统的响应。
ARP 方法:检查系统 ARP 缓存以查看哪些 IP 地址最近处于事件状态。这只会显示最近几分钟在同一网段上有广播数据包的系统。
这两种方法都可能被防火墙、路由器甚至交换机阻止,因此“LAN”的确切边界可能非常狭窄。这两种方法都可以通过编程方式实现,但调用命令行 ping
或 arp
命令可能更简单、更便携。
关于c++ - LAN 网络上所有主机的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023222/