要获取接口和 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命令可能更简单且更便携。
| 归档时间: |
|
| 查看次数: |
2926 次 |
| 最近记录: |