Gibt es einen ICMP-Echoanforderungsdienst?

7

In von mir entwickelten Anwendungen möchte ich häufig eine Netzwerkstatusanzeige für verschiedene Geräte im Netzwerk einfügen. Der einfachste Weg, diese Geräte zu überwachen, besteht darin, sie zu pingen. ICMP-Echos lassen sich jedoch aufgrund von Sicherheitsanforderungen mit Raw-Sockets oder Leistungsproblemen beim Shelling-Out häufig nur schwer in eine Anwendung integrieren ping. In Situationen, in denen dies kein Problem darstellt, schreibe ich für verschiedene Situationen leicht unterschiedliche Variationen desselben Ping-Codes.

Die meisten Geräte, die ich überwache, sind eingebettete Geräte mit minimalen Netzwerkfunktionen (enthalten jedoch immer ICMP-Echo). Daher muss ich mich an dieses Protokoll halten. Dinge wie das Echo-Protokoll (von Mark in den Kommentaren unten hervorgehoben, danke!) Sind normalerweise nicht vorhanden steht mir nicht zur Verfügung.

Gibt es bereits einen Dienst, der ICMP-Ping-Dienste mit geringem Overhead für eine Nicht-Root-Anwendung bereitstellen kann?

Ich denke darüber nach, einen Dienst zu schreiben, der als Root ausgeführt wird und es anderen Nicht-Root-Anwendungen ermöglicht, eine Verbindung zu ihm herzustellen, Geräte zur Überwachung hinzuzufügen und dann Ping-Zeiten und Netzwerkstatus abzufragen, aber ich möchte ein Rad und mich nicht neu erfinden Ich frage mich, ob so etwas schon existiert.

Jason C.
quelle
2
Sieht en.wikipedia.org/wiki/Echo_Protocol wie etwas aus, das Sie verwenden könnten? Es ist kein ICMP. Es ist normalerweise ziemlich einfach, den Server zu installieren.
Mark Plotnick
@MarkPlotnick Das ist ein guter Vorschlag, wenn verfügbar und einfach in einen Client zu integrieren. Leider sind die meisten Geräte, die ich überwache, normalerweise benutzerdefinierte oder minimale eingebettete Systeme, die ICMP-Echo unterstützen, jedoch nicht das Echo-Protokoll.
Jason C
2
Ich denke, die häufigste Strategie, die von Nicht-Root-Programmen verwendet wird, besteht darin, den pingBefehl selbst auszuführen . Es gibt Optionen, um es stumm zu schalten, und dann können Sie einfach den Beendigungsstatus überprüfen, um festzustellen, ob er erfolgreich war oder nicht.
Barmar

Antworten:

2

Die Antwort auf Ihre Frage lautet wahrscheinlich "Nein, gibt es nicht."

Der Grund dafür ist, dass ICMP ein Low-Level-Protokoll ist. Um ICMP-Verkehr zu erzeugen, benötigt eine Anwendung einen privilegierten Zugriff auf Ihre Netzwerkschnittstelle. Sie können dies auf den meisten Systemen daran erkennen, dass die Binärdateien, die ICMP generieren, set-uid root sind. Beachten Sie das klebrige Stück:

$ 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

(Dies ist unter FreeBSD der Fall. Ihre Ergebnisse unter anderen Betriebssystemen können abweichen.)

Damit eine Anwendung unformatierten Netzwerkverkehr generieren kann, muss sie als Root ausgeführt werden. Da es /sbin/pingbereits als Root ausgeführt wird, wird es wahrscheinlich am besten verwendet, um Ihre Pings zu generieren.

Wenn Sie dies für eine große Anzahl von Hosts tun, sollten Sie sich fping ansehen . Eine andere Option wäre tcping , mit dem TCP-Pakete generiert werden können, die ähnliche Ergebnisse wie ein ICMP-Ping liefern. Die Anforderung wäre ein offener Port auf dem Zielsystem, um das Paket zu empfangen. Möglicherweise können Sie dies verwenden oder den Ansatz basierend auf der Quelle replizieren. Beide sind möglicherweise bereits als Paket für Ihr Betriebssystem verfügbar.

Für eine größere Überwachungslösung sind Nagios und Zabbix beliebte kostenlose Optionen, aber es gibt viele andere.

Ghoti
quelle
1

Vielleicht zu aufgebläht für das, wonach Sie suchen, aber die meisten vollwertigen Überwachungslösungen wie Nagios, icinga oder check_mk bieten ICMP-Überwachung und häufig APIs, die Sie abfragen können.

plonk
quelle
Hey, das ist keine schlechte Idee. Ich habe Nagios vergessen und die anderen nie ausprobiert. Ich werde einige Zeit mit ihnen verbringen und sehen, ob ich eine finde, die einfach zu integrieren ist.
Jason C