LAN网络上所有主机的列表

boo*_*oom 6 c++ cocoa network-programming

如何在LAN中获取所有IP地址和关联的主机名?

Set*_*ble 0

要获取接口和 IP 地址的列表,请使用getifaddrs()

搜索接口ifa_addr->sa_family == AF_INET

IP 地址位于sin_addr.s_addr.

然后,您可以用来gethostbyaddr()查找该 IP 地址的 DNS 名称。

更新:

有人向我指出,OP 可能是在询问发现其他主机,而不是本地计算机上的接口地址。

没有可靠的方法来发现局域网上的其他计算机,但有一些技巧。

  • Ping 方法:使用 ping 实用程序(或等效程序)对本地广播地址执行 ping 操作,然后查看谁响应。可以通过列出如上所示的接口来找到广播地址。我相信 ICMP 在 OSX 下不需要 root 访问权限。请注意,许多系统可能禁用了 ICMP ping 或设置了防火墙,因此您只能收到来自非隐形系统的响应。

  • ARP 方法:检查系统 ARP 缓存,查看哪些 IP 地址最近处于活动状态。这只会显示最近几分钟内在同一网段上有广播数据包的系统。

这两种方法都可以被防火墙、路由器甚至交换机阻止,因此“LAN”的确切边界可能非常窄。这两种方法都可以通过编程方式实现,但仅调用命令行pingarp命令可能更简单且更便携。