如何在局域网中获取所有IP地址和关联的主机名?
答案 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”的确切边界可能非常窄。这两种方法都可以通过编程方式实现,但只需调用命令行ping
或arp
命令就可以更简单,更轻松。