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.
quelle
ping
Befehl 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.Antworten:
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:
(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/ping
bereits 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.
quelle
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.
quelle