存在于局域网中的所有IP地址(即设备)列表

我想获得局域网中所有IP地址(即设备)的列表。 我不想使用nmap,其他networking工具。 我也不想ping每个IP地址在一个子网范围内,并find活的IP地址? 有什么办法使用C,C ++?

没有可靠的方法来确定局域网中的所有主机。 猜测你的邻居有许多方法,各有其优点和缺点。 但你永远不会确定你得到所有的主机。 例如,您可以尝试ping广播,但有人无法回复ping。 所以没有可靠的方法来做到这一点。 有一些方法依赖terminal中的命令。 你可以尝试使用nmap。 虽然需要安装nmap:

nmap -sP 192.168.1.* 

这在整个子网中执行简单的ping扫描,以查看所有主机在线。

或者您也可以尝试以下步骤(不需要安装nmap):

  • 在命令提示符下键入“ipconfig”。 这会给你你自己机器的IP地址。 比如你的机器的ip地址是192.168.1.6那么你的广播IP地址是192.168.1.255。
  • Ping你的广播IP地址“ping 192.168.1.255”(可能需要linux上的-b)
  • 现在input“arp -a”你会得到你的网段上所有IP地址的列表。

您可以使用一些工具包在应用程序中使用适当的参数来启动arp或nmap。

在Qt中,您可以使用QProcess来完成它们,如:

 QProcess myProcess; QString program = "arp"; QStringList arguments; arguments << "-a"; myProcess.start(program, arguments); myProcess.waitForFinished(); QByteArray result = myProcess.readAllStandardOutput (); const QString all(result); 

没有。

当然,为了解决这个问题,你将不得不使用一些“networking工具”,你如何期望在其他机器上知道其他机器?

一种方法可能是查询DHCP服务器,但不会显示具有静态IP的设备,等等。

任何可靠的方法都需要以某种方式与有问题的设备进行通信。

您可以使用libpcap在中心位置以混杂模式嗅探networking数据包,并提取源IP。 挑战是确定一个放置这个嗅探器的中心位置。