Mir sind die Methoden bekannt, mit denen Sie eine Bash- for
Schleife und ping
mehrere Server ausführen können. Es gibt ein Linux-CLI-Tool, mit dem ich dies tun kann, ohne ein Bash-Skript auf ping
eine Liste von Servern schreiben zu müssen eins nach dem anderen?
Etwas wie das:
$ ping host1 host2 host3
HINWEIS: Ich suche speziell nach CentOS / Fedora, aber wenn es auf anderen Distributionen funktioniert, ist das auch in Ordnung.
networking
ping
icmp
slm
quelle
quelle
Antworten:
Wenn Sie sich das NMAP-Projekt ansehen, werden Sie feststellen, dass es zusätzliche Tools zusätzlich zu nur enthält
nmap
. Eines dieser Toolsnping
umfasst die folgenden Funktionen:nping
ist in den Standard-EPEL-Repos zu booten.Verwendung
Um mehrere Server zu pingen, müssen Sie lediglich
nping
die Namen / IPs und das zu verwendende Protokoll angeben. Da wir hier nachahmen möchten, was die traditionelleping
CLI tut, verwenden wir ICMP.Der einzige Nachteil, den ich bei diesem Tool festgestellt habe, ist die Verwendung des ICMP-Modus, für den Root-Berechtigungen erforderlich sind.
quelle
nmap
Unterstützt auch ICMP direkt durch Angabe der Option-sn
. Siehe meine Antwort für Details.fping ist in einem gleichnamigen Fedora-Paket enthalten und ermöglicht viele Hosts oder eine Reihe von IP-Adressen.
quelle
Beschreibung:
quelle
Ich würde vorschlagen, GNU Parallel zu verwenden
Die Ausgabe wird verschachtelt
quelle
Ich weiß, dass es nicht das ist, wonach Sie fragen, sondern ein Bash-Skript, um dies zu erreichen:
Dadurch werden Ihre Endpunkte als Befehlszeilenargumente verwendet, und es wird jeweils ein Ping mit 5 Zählern als Hintergrundprozess gesendet. Warten Sie, bis alle beendet sind, bevor Sie das Programm beenden. Es werden die letzten drei Zeilen der Ping-Ausgabe gedruckt, die nützliche Statistiken zur Erfolgsrate und Latenz enthalten.
quelle
wait
wartet auf alle aktiven untergeordneten Prozesse, sodass Sie die zweite Schleife vermeiden können. Ich denke, ein Grund, warum es nicht erforderlich war, ein Bash-Skript zu schreiben, ist, eine Lösung zu haben, die auf jedem Computer funktioniert, ohne ein Skript mit sich herumtragen oder schreiben zu müssen. Es scheint günstiger zu sein, es kurz zu halten, also würde ich es besser finden, diese Argumentzuweisung zu vermeiden und es einfachfor host; do
in Ihrer ersten Schleife zu tun . Wenn dies zsh wäre, könnten Sie dasdo
und vermeidendone
und nur interaktiv tun:for host in google.com; ping -c5 "$host" |& tail -3 & wait
command &
) in einer Subshell (dh Verpackung mit Pars) und mit einemwait
beliebigen Anzahl von Befehlen in einen künstlichen Befehl, zum Beispiel zu kombinieren:(for f in google.com yahoo.com microsoft.com; do ping $f & done; wait)
. Ihre Ausgaben werden verschachtelt, und wenn Sie nach diesem Befehl Strg + C drücken, werden alle drei untergeordneten Prozesse beendet. Die Shell verfügt über eine Vielzahl leistungsfähiger Job-Control-Konstrukte, und dies ist eines davon.Ich nehme an, das kann für Sie tun?
Es nutzt
printf
die Möglichkeit, die Argumente automatisch zu iterieren, während die Formatzeichenfolge für jedes Argument erneut verwendet wird. Das Obigeprintf
erzeugt daher eine Folge vonping <hostname> &
Zeichenfolgen für jeden als Argument bereitgestellten Host und leitet diese Folge von Befehlen durcheval
Befehlsersetzung an den Befehl weiter, damit sie sofort ausgeführt werden.printf
undeval
Befehle entsprechen dem POSIX-Standard sowie der Befehlssubstitution.Füge den gesamten Befehl in eine Subshell ein, die ein und-ed
wait
wie folgt enthält :bietet die Möglichkeit, alles mit einem einfachen nach Belieben zu unterbrechen Ctrl+C.
Ansonsten können Sie jeden
ping
Befehl einzeln über die normale Jobsteuerung der Shell steuern.Wenn Ihre Shell auch Process Substitutions unterstützt, können Sie auch Folgendes verwenden:
für ein paar Zeichen weniger tippen.
Der Inhalt ist derselbe wie bei der
eval
, aber er gibt die Sequenz vonping
s über die Prozessersetzung an den.
(akasource
) -Befehl weiter.quelle
Nmap unterstützt Ping-Scans (ICMP) und mehrere Hosts:
nmap -sn -n 127.0.0.1 8.8.8.8
Sie können auch eine Datei erstellen, die alle Ihre Ziel-IPs enthält (durch Leerzeichen oder Zeilenumbrüche getrennt)
targets.txt
. Dann renne:nmap -sn -n -iL targets.txt
Optionen erklärt:
-sn
Ping-Scan.-n
Deaktivieren Sie die DNS-Auflösung.-iL
Dateiname eingeben.Weitere interessante Optionen für den Fall, dass Sie eine sehr große Anzahl von Zielen anpingen möchten:
-T4
Erhöhen Sie das Timing, um die Scan-Dauer zu verkürzen.--min-parallelism 100
Erhöhen Sie die Anzahl der parallelen Sonden.-oG <file>
Schreiben Sie die Scanergebnisse in eine Datei im Grepable-Format.Ohne eine Datei zu erstellen
Denken Sie daran, dass Sie auch auf die Erstellung einer Datei verzichten und a verwenden können
-
, um Eingaben entweder über eine Pipe|
oder über herkömmliche Methoden zum Umleiten von Ausgaben über STDIN zu erhalten.Beispiele:
-oder-
-oder-
Verweise
quelle
Verwenden Sie den allgemeinen
xargs
Befehl, um mehrereping
Anforderungen auszuführen :Dabei
host1 host2 host3
kann es sich um eine variable Anzahl von Hosts handeln (eine beliebige Kombination aus IP-Adresse oder Hostname).Dies ändert die
xargs
Standardeinstellungen, um 1 Eingabeargument pro Ping-Ausführung zu erzwingen und eine unbegrenzte Anzahl von parallelen untergeordneten Prozessen zuzulassen (1 pro Ping-Host). Es ist wahrscheinlich ratsam,-P
(auch bekannt als--max-procs
) einen vernünftigen Wert festzulegen, wenn Sie eine große Anzahl von Hosts anpingen möchten (alle werden verarbeitet, nur weniger gleichzeitig).Es ist kurz genug, um es direkt zu verwenden, kann als Funktion zu Ihrem Shell-Profil oder Ihrer RC-Datei hinzugefügt oder in Ihrem Skript in ein winziges Skript verwandelt werden
$PATH
. In den folgenden Beispielen-P
wurde auf 10 gesetzt, um einen übermäßigen Ressourcenverbrauch zu vermeiden.Beispielskript:
/usr/bin/mping
Beispielfunktion innerhalb
~/.bashrc
Und verwenden Sie als:
quelle
--max-procs
/ festgelegt haben-P
. Bei einer Host-Anzahl von weniger als-P
werden jedoch alle Pings parallel ausgeführt. Dies bedeutet, dass nicht die Summe aller Pings, sondern die Dauer der längsten einzelnen Ping-Ausführung beträgt.Ich weiß nicht genau, was Sie wollen, aber Sie können die letzten 8 Bit in die Dezimalzahl 255 ändern, damit Ihre Hosts eine Übertragung empfangen. Tatsächlich werden Ping-Pakete an alle Geräte in einem Netzwerk gesendet.
quelle
Ausgabe
quelle
&&
Operator die Ausführung des zweiten Befehls nur zulässt, wenn der erste Befehl erfolgreich ausgeführt wurde (z. B. der Beendigungscode 0). Erwägen Sie, einen -c- und einen -w-Parameter hinzuzufügen. Willkommen auf der Seite!Nur zum Spaß und Profit ...
Dies könnte leicht verbessert werden. Das macht es ziemlich nützlich. :)
Weitere Optionen finden Sie in den Manpages für bsd ping und Linux ping
HTH
BEARBEITEN: Leicht aktualisiert, um die Ping-Abfragen mit jeweils 6 Pings zu beenden und Manpage-Optionen hinzuzufügen.
quelle
ping
Aufruf wird nur zurückgegeben, wenn ein schwerwiegender Fehler auftritt.Verwenden Sie den folgenden einfachen Befehl:
quelle