c++ - LAN 网络上所有主机的列表

标签 c++ cocoa network-programming

如何获取局域网中所有的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”的确切边界可能非常狭窄。这两种方法都可以通过编程方式实现,但调用命令行 pingarp 命令可能更简单、更便携。

关于c++ - LAN 网络上所有主机的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023222/

相关文章:

objective-c - 在 NSCollectionView 子类中接受拖动操作

c - C中的套接字编程

c# - Socket组件TcpClient可以使用http代理吗?

cocoa - NSWindowController 子类 - Init 被调用两次

network-programming - 如何从 golang 程序中设置 ulimit -n?

c++ - 将一个函数模板的模板参数映射到另一个函数模板的模板参数 (c++)

C++ 断言消息

自 1970 年 1 月 1 日起,C++ 将 Windows 时间设置为毫秒

c++ - Python 相当于 QList c++ 的 join

objective-c - 在 Cocoa 中创建具有 “genie” 效果的动画