Jas*_*n C 7 networking ping services icmp
通常,在我开发的应用程序中,我喜欢为网络上的各种设备包含一个网络状态指示器。监控这些设备的最简单方法是 ping 它们。但是,由于原始套接字的安全要求或外壳到ping
. 此外,对于这不是问题的情况,我有点为各种情况编写了相同 ping 代码的略有不同的变体。
大部分的设备,我监视嵌入设备用最少的网络功能(但总是包括ICMP回声),所以我也必须坚持这一协议,喜欢的东西回声协议(马克在下面的评论中指出,谢谢!)通常AREN对我不可用。
是否存在可以为非根应用程序提供低开销 ICMP ping 服务的服务?
我正在考虑编写一个以 root 身份运行并允许其他非 root 应用程序连接到它的服务,添加要监控的设备,然后从中查询 ping 时间和网络状态,但我不想重新发明轮子,我我想知道是否已经存在这样的东西。
您的问题的答案可能是“不,没有”。
原因是 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 类似的结果。要求是目标系统上有一个开放端口来接收数据包。您也许可以使用此方法或根据源复制其方法。这两者可能已经作为适用于您的操作系统的软件包提供。
对于更大规模的监控解决方案,Nagios和Zabbix是流行的免费选项,但还有许多其他选项。