複数のIPアドレスを同時にpingする方法は?

複数のIPアドレスを同時にpingする方法は?

for複数のサーバーでBashループを実行する方法を知っています。一度に 1 つずつ、サーバーのリストpingに Bash スクリプトを記述することなくこれを実行できる Linux CLI ツールはありますか?ping

このような:

$ ping host1 host2 host3

メモ:私は特にCentOS / Fedoraを探していますが、他のディストリビューションでも動作する場合はそれも良いでしょう。

答え1

調べるならNMAPプロジェクトそれに加えて、他のツールが含まれていることがわかります。nmap。これらのツールの1つはnping、これには次の機能が含まれます。

Npingは、生成されたパケットをユーザーに完全に制御するための非常に柔軟で強力なコマンドラインインターフェイスを提供します。 Npingの機能は次のとおりです。

  • TCP、UDP、ICMP、および ARP パケット生成をカスタマイズします。
  • 複数のターゲットホスト仕様をサポートします。
  • マルチターゲットポート仕様をサポートします。
  • ...

nping実行のために標準EPELリポジトリに配置されます。

$ repoquery -qlf nmap.x86_64 | grep nping
/usr/bin/nping
/usr/share/man/man1/nping.1.gz

使用法

nping複数のサーバーをpingするには、使用したい名前/ IPとプロトコルだけを知らせます。既存のCLIの機能を模倣しようとしているので、pingICMPを使用します。

$ sudo nping -c 2 --icmp scanme.nmap.org google.com

Starting Nping 0.7.70 ( https://nmap.org/nping ) at 2019-06-14 13:43 EDT
SENT (0.0088s) ICMP [10.3.144.95 > 45.33.32.156 Echo request (type=8/code=0) id=42074 seq=1] IP [ttl=64 id=57921 iplen=28 ]
RCVD (0.0950s) ICMP [45.33.32.156 > 10.3.144.95 Echo reply (type=0/code=0) id=42074 seq=1] IP [ttl=46 id=24195 iplen=28 ]
SENT (1.0091s) ICMP [10.3.144.95 > 45.33.32.156 Echo request (type=8/code=0) id=42074 seq=2] IP [ttl=64 id=57921 iplen=28 ]
SENT (2.0105s) ICMP [10.3.144.95 > 45.33.32.156 Echo request (type=8/code=0) id=42074 seq=2] IP [ttl=64 id=57921 iplen=28 ]
RCVD (2.0107s) ICMP [45.33.32.156 > 10.3.144.95 Echo reply (type=0/code=0) id=42074 seq=2] IP [ttl=46 id=24465 iplen=28 ]
SENT (3.0138s) ICMP [10.3.144.95 > 64.233.177.100 Echo request (type=8/code=0) id=49169 seq=2] IP [ttl=64 id=57921 iplen=28 ]

Statistics for host scanme.nmap.org (45.33.32.156):
 |  Probes Sent: 2 | Rcvd: 2 | Lost: 0  (0.00%)
 |_ Max rtt: 86.053ms | Min rtt: 0.188ms | Avg rtt: 43.120ms
Statistics for host google.com (64.233.177.100):
 |  Probes Sent: 2 | Rcvd: 0 | Lost: 2  (100.00%)
 |_ Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 4 (112B) | Rcvd: 2 (108B) | Lost: 2 (50.00%)
Nping done: 2 IP addresses pinged in 3.01 seconds

このツールで見られる唯一の欠点は、ICMPモードを使用するにはroot権限が必要であることです。

$ nping -c 2 --icmp scanme.nmap.org google.com
Mode ICMP requires root privileges.

答え2

平らな同じ名前のFedoraパッケージにあり、複数のホストまたはIPアドレスのセットを受け入れます。

$ fping -a -A -c 1 hosta hostb
192.168.0.20 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.64/0.64/0.64
192.168.1.3  : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.50/0.50/0.50

fping は ping パケットを送信し、ラウンドロビン方式で次の宛先に移動します。宛先が応答すると、記録され、リストから削除されます。

答え3

使用することをお勧めしますGNUパラレル

parallel -u ping ::: host1 host2 host3

出力はインターリーブされます。

答え4

私は正確に知っていますいいえあなたが要求するのは、これを行うためのbashスクリプトです。

#!/bin/bash

for host; do
    ping -c5 "$host" 2>&1 | tail -3 &
done

wait

その後、エンドポイントをコマンドライン引数として使用し、バックグラウンドプロセスとして各エンドポイントに5つのpingを送信し、終了する前にすべてのエンドポイントが完了するのを待ちます。成功率と待ち時間に関する有用な統計を含むping出力の最後の3行を印刷します。

関連情報