slm*_*slm 26 networking ping icmp
我知道可以运行 Bashfor
循环的方法和ping
多台服务器的方法,是否有我可以使用的 Linux CLI 工具,它允许我执行此操作而不必求助于将 Bash 脚本编写到ping
服务器列表一次一个?
像这样的东西:
$ ping host1 host2 host3
Run Code Online (Sandbox Code Playgroud)
注意:我正在寻找 CentOS/Fedora,但如果它适用于其他发行版,那也很好。
slm*_*slm 33
如果您查看NMAP 项目,您会发现它在nmap
. 这些工具之一是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
Run Code Online (Sandbox Code Playgroud)
要 ping 多个服务器,您只需告诉nping
名称/IP 以及您要使用的协议。在这里,由于我们想模仿传统ping
CLI 的功能,因此我们将使用 ICMP。
$ 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
Run Code Online (Sandbox Code Playgroud)
我发现这个工具的唯一缺点是使用需要 root 权限的 ICMP 模式。
$ nping -c 2 --icmp scanme.nmap.org google.com
Mode ICMP requires root privileges.
Run Code Online (Sandbox Code Playgroud)
meu*_*euh 21
fping位于同名的 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
Run Code Online (Sandbox Code Playgroud)
fping 将发送一个 ping 数据包并以循环方式移动到下一个目标...如果目标回复,则将其从列表中记录并删除
GAD*_*D3R 10
oping host1 host2 host3
Run Code Online (Sandbox Code Playgroud)
oping 使用 ICMP 包(也称为“ping 包”)来测试网络主机的可达性。它支持并行ping多台主机使用 IPv4 和/或 IPv6 透明地。
该软件包包含两个命令行应用程序:“oping”是 ping(1)、ping6(1) 和 fping(1) 等工具的替代品。“noping”是一个基于 ncurses 的工具,它在 ping 时显示统计信息并突出显示异常的往返时间。
小智 10
我建议使用GNU Parallel
parallel -u ping ::: host1 host2 host3
Run Code Online (Sandbox Code Playgroud)
输出将被交错
我知道这不是您所要求的,而是一个 bash 脚本来完成此任务:
#!/bin/bash
for host; do
ping -c5 "$host" 2>&1 | tail -3 &
done
wait
Run Code Online (Sandbox Code Playgroud)
这会将您的端点作为命令行参数,并向每个端点发送 5 次 ping 作为后台进程,然后等待所有端点完成后再退出。它将打印 ping 输出的最后三行,其中包含有关成功率和延迟的有用统计信息。