AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 524963
Accepted
slm
slm
Asked: 2019-06-15 09:46:27 +0800 CST2019-06-15 09:46:27 +0800 CST 2019-06-15 09:46:27 +0800 CST

如何同时 ping 多个 IP 地址?

  • 772

我知道可以运行 Bashfor循环和ping多台服务器的方法,是否有我可以使用的 Linux CLI 工具,它允许我执行此操作,而无需将 Bash 脚本写入ping服务器列表一次一个?

像这样的东西:

$ ping host1 host2 host3

注意:我正在专门寻找 CentOS/Fedora,但如果它适用于其他发行版也很好。

networking ping
  • 12 12 个回答
  • 56824 Views

12 个回答

  • Voted
  1. Best Answer
    slm
    2019-06-15T09:46:27+08:002019-06-15T09:46:27+08:00

    如果您查看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
    

    用法

    要 ping 多台服务器,您只需告知nping名称/IP 以及您要使用的协议。在这里,因为我们想模仿传统pingCLI 的功能,我们将使用 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
    

    我发现这个工具的唯一缺点是使用需要 root 权限的 ICMP 模式。

    $ nping -c 2 --icmp scanme.nmap.org google.com
    Mode ICMP requires root privileges.
    
    • 33
  2. meuh
    2019-06-15T11:44:49+08:002019-06-15T11:44:49+08:00

    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
    

    fping 将发送一个 ping 数据包并以循环方式移动到下一个目标...如果目标回复,则将其记录并从列表中删除

    • 22
  3. Diaa Sami
    2019-06-18T08:20:30+08:002019-06-18T08:20:30+08:00

    我建议使用GNU Parallel

    parallel -u ping ::: host1 host2 host3
    

    输出将被交错

    • 13
  4. GAD3R
    2019-06-15T12:57:39+08:002019-06-15T12:57:39+08:00
    oping host1 host2 host3
    

    描述:

    oping 使用 ICMP 包(通常称为“ping 数据包”)来测试网络主机的可达性。它支持透明地使用 IPv4 和/或 IPv6并行ping 多个主机。

    该软件包包含两个命令行应用程序:“oping”是 ping(1)、ping6(1) 和 fping(1) 等工具的替代品。“noping”是一个基于 ncurses 的工具,它在 ping 时显示统计数据并突出显示异常的往返时间。

    • 10
  5. jesse_b
    2019-06-15T10:41:25+08:002019-06-15T10:41:25+08:00

    我知道这不是你所要求的,而是一个 bash 脚本来完成这个:

    #!/bin/bash
    
    for host; do
        ping -c5 "$host" 2>&1 | tail -3 &
    done
    
    wait
    

    这会将您的端点作为命令行参数,并作为后台进程向每个端点发送 5 个计数 ping,然后等待所有端点完成后再退出。它将打印 ping 输出的最后三行,其中包含有关成功率和延迟的有用统计信息。

    • 5
  6. LL3
    2019-06-16T09:33:00+08:002019-06-16T09:33:00+08:00

    我想这可以为你做吗?

    eval $(printf 'ping "%s" & ' host1 host2 host3)
    

    它利用了printf“自动迭代”其参数的能力,同时在每个参数上重新使用其格式字符串。因此,上面为作为参数提供的每个主机printf生成了一个ping <hostname> &字符串序列,并通过命令替换将这样的命令序列馈送到eval命令以使它们立即执行。

    printf和eval命令是 POSIX 标准,以及命令替换。

    将整个此类命令包含在一个包含这样的 and-ed 的子shell中wait:

    (eval $(printf 'ping "%s" & ' host1 host2 host3) && wait)
    

    提供通过简单的Ctrl+C.

    否则,您可以ping通过 shell 通常的作业控制单独控制每个命令。

    如果您的 shell 也支持 Process Substitutions,您还可以使用以下内容:

    . <(printf 'ping "%s" & ' host1 host2 host3)
    

    少输入几个字符。

    要点与 s 相同,但通过 Process Substitution 将seval的序列提供给(aka )命令。ping.source

    • 3
  7. Jason Musgrove
    2019-06-18T08:01:52+08:002019-06-18T08:01:52+08:00

    通过使用通用xargs命令构建一个执行多个ping请求:

    echo host1 host2 host3 | xargs -n1 -P0 ping -c 4
    

    其中host1 host2 host3可以是可变数量的主机(IP 或主机名的任意组合)。

    这将更改xargs默认设置,强制每次 ping 执行 1 个输入参数,并允许无限数量的并行子进程(每个 ping 主机 1 个)。如果打算 ping 大量主机(它们都将被处理;同时处理的更少) ,将-P(aka )设置为一个合理的值可能是明智的。--max-procs

    它足够短,可以直接使用,可以作为一个函数添加到你的 shell 配置文件或 rc 文件中,或者在你的$PATH. 在下面的示例中,-P已设置为 10 以避免过多的资源消耗。

    示例脚本:/usr/bin/mping

    #!/bin/sh
    
    echo $@ | xargs -n1 -P10 ping -c4
    

    内的示例函数~/.bashrc

    function mping() {
        echo $@ | xargs -n1 -P10 ping -c4
    } 
    

    并用作:

    mping host1 host2 host3 ...
    
    • 3
  8. scai
    2019-06-18T01:57:20+08:002019-06-18T01:57:20+08:00

    Nmap支持 ping 扫描 (ICMP) 和多个主机:

    nmap -sn -n 127.0.0.1 8.8.8.8

    您还可以创建一个包含所有目标 IP(由空格或换行符分隔)的文件,名为targets.txt. 然后运行:

    nmap -sn -n -iL targets.txt

    选项说明:

    • -sn平扫描。
    • -n禁用 DNS 解析。
    • -iL输入文件名。

    如果您想要 ping 大量目标,其他有趣的选项:

    • -T4增加时间以减少扫描持续时间。
    • --min-parallelism 100增加并行探针的数量。
    • -oG <file>将扫描结果以 Grepable 格式写入文件。

    不创建文件

    请记住,您还可以放弃创建文件并使用 a-从管道获取输入|,或者通过传统方法通过 STDIN 重定向输出。

    例子:

    $ ( echo www.google.com; echo www.yahoo.com ) | sudo nmap -sn -n -iL -
    

    -或者-

    $ sudo nmap -sn -n -iL - < <(echo www.google.com; echo www.yahoo.com)
    

    -或者-

    $ sudo nmap -sn -n -iL - <<< $'www.google.com\nwww.yahoo.com'
    

    参考

    • 目标规范 - 第 15 章。Nmap 参考指南
    • 2
  9. CSD
    2019-06-15T12:37:06+08:002019-06-15T12:37:06+08:00

    我不知道您到底想要什么,但您可以将最后 8 位设置更改为十进制 255,这样您的主机将收到广播,实际上,它会将 ping 数据包传输到网络中存在的所有设备。

    ping -c 1 xx.xx.xx.255
    
    • 1
  10. Manish
    2019-06-18T00:19:59+08:002019-06-18T00:19:59+08:00
    ping google.com && ping localhost
    

    输出

    Pinging google.com [xxxxxxx] with 32 bytes of data:
    Reply from xxxxxxx: bytes=32 time=210ms TTL=49
    Reply from ::1: time<1ms
    Reply from xxxxxxx: bytes=32 time=212ms TTL=49
    Reply from ::1: time<1ms
    Reply from xxxxxxx: bytes=32 time=211ms TTL=49
    Reply from ::1: time<1ms
    
    • 1

相关问题

  • 查找与端口关联的线程/脚本?

  • 关于网络挂载文件的问题

  • IP地址可以以255结尾而不是广播IP地址吗?

  • 无法识别arp命令或ip命令哪个MAC地址输出正确

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve