LAN网络上所有主机的列表

时间:2010-10-26 11:36:51

标签: c++ cocoa network-programming

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

1 个答案:

答案 0 :(得分: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命令就可以更简单,更轻松。