是否有 ICMP 回显请求服务?

Jas*_*n C 7 networking ping services icmp

通常,在我开发的应用程序中,我喜欢为网络上的各种设备包含一个网络状态指示器。监控这些设备的最简单方法是 ping 它们。但是,由于原始套接字的安全要求或外壳到ping. 此外,对于这不是问题的情况,我有点为各种情况编写了相同 ping 代码的略有不同的变体。

大部分的设备,我监视嵌入设备用最少的网络功能(但总是包括ICMP回声),所以我必须坚持这一协议,喜欢的东西回声协议(马克在下面的评论中指出,谢谢!)通常AREN对我不可用。

是否存在可以为非根应用程序提供低开销 ICMP ping 服务的服务?

我正在考虑编写一个以 root 身份运行并允许其他非 root 应用程序连接到它的服务,添加要监控的设备,然后从中查询 ping 时间和网络状态,但我不想重新发明轮子,我我想知道是否已经存在这样的东西。

gho*_*oti 3

您的问题的答案可能是“不,没有”。

原因是 ICMP 是低级协议,为了产生 ICMP 流量,应用程序需要对网络接口进行特权访问。您可以在大多数系统上看到这一点,因为生成 ICMP 的二进制文件是 set-uid root。注意粘性位:

$ ls -l /sbin/ping /usr/sbin/traceroute
-r-sr-xr-x  1 root  wheel  28088 Aug 12 12:19 /sbin/ping
-r-sr-xr-x  1 root  wheel  28608 Aug 12 12:20 /usr/sbin/traceroute
Run Code Online (Sandbox Code Playgroud)

(这是在 FreeBSD 上进行的。在其他操作系统上的结果可能会有所不同。)

对于生成原始网络流量的应用程序,它需要以 root 身份运行。由于/sbin/ping已经以 root 身份运行,因此最好的选择可能是使用它来生成 ping。

如果您要对大量主机执行此操作,您可能需要查看fping。另一个选项是tcping,它可以生成 TCP 数据包,提供与 ICMP ping 类似的结果。要求是目标系统上有一个开放端口来接收数据包。您也许可以使用此方法或根据源复制其方法。这两者可能已经作为适用于您的操作系统的软件包提供。

对于更大规模的监控解决方案,NagiosZabbix是流行的免费选项,但还有许多其他选项。