ping несколько IP с помощью bash?

Ненавижу отвечать на мои собственные вопросы, но вот он: https://answers.launchpad.net/ubuntu/+question/215352

1
задан 31 January 2014 в 11:24

5 ответов

#!/bin/bash
while read hostname
do
ping -c 1 -t 1 "$hostname" > /dev/null 2>&1 && 
echo "Ping Status of $hostname : Success" || 
echo "Ping Status of $hostname : Failed" 
done < host.txt

$ cat host.txt

host1.example.com
192.168.0.123
8.8.8.8
...
...
google.com

См. http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/ [ ! d1]

2
ответ дан 24 May 2018 в 12:20

Проверьте этот скрипт.

   #!/bin/bash
    for i in `seq ${2} ${3}`
    do
        ping -c 1 ${1}.${i} > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "${1}.${i} responded."
        else
            echo "${1}.${i} did not respond."
        fi
    done

Для запуска ./script 192.168.1 0 10, например, это приведет к тому, что ips 192.168.1.0 - 192.168.1.10, а echo ответит, если ping - это нормально и didn Ответьте, если нет.

NB: вы можете заменить статические переменные $ 1 $ 2 $ 3, если диапазон и IP всегда совпадают.

1
ответ дан 24 May 2018 в 12:20
  • 1
    IP не от одного диапазона. вот критерии. в любом случае спасибо за ответ. + 1 – Ten-Coin 31 January 2014 в 11:52
  • 2
    ОК, пожалуйста, укажите это в своем вопросе. Спасибо за + – Maythux 31 January 2014 в 11:53
  • 3
    Чистый и простой скрипт, который может быть очень полезен (например, на встроенных устройствах), даже если он не затрагивает 100% условий вопроса. Спасибо вам. +1 заслуживает. – Sopalajo de Arrierez 24 February 2018 в 21:40
echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1

или с grep, см. только узлы не ping

echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 | grep -b1 100
1
ответ дан 24 May 2018 в 12:20

Ну

Простой:: используйте команду parallel --gnu, а затем вашу команду.

Получить примеры IP:

$ dig +trace google.com |ipx

127.0.0.1
127.0.0.1
199.7.91.13
199.7.91.13
192.48.79.30
192.48.79.30
173.194.33.161
173.194.33.165
173.194.33.163
173.194.33.164
173.194.33.174
173.194.33.160
173.194.33.167
173.194.33.166
173.194.33.162
173.194.33.169
173.194.33.168
216.239.32.10
216.239.32.10

$ parallel --gnu ping -c1 ::: `dig +trace google.com |ipx`
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.018 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 ms
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.017 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.017/0.017/0.017/0.000 ms
PING 173.194.33.132 (173.194.33.132) 56(84) bytes of data.
64 bytes from 173.194.33.132: icmp_req=1 ttl=54 time=20.5 ms

--- 173.194.33.132 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.526/20.526/20.526/0.000 ms
PING 173.194.33.131 (173.194.33.131) 56(84) bytes of data.
64 bytes from 173.194.33.131: icmp_req=1 ttl=54 time=20.7 ms
1
ответ дан 24 May 2018 в 12:20

Предположим, что у вас есть 5 IP-адресов (чтобы уменьшить только ответ), тогда вы можете выполнить ping с помощью

#!/usr/bin/bash    
for i in xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxxx 
do
ping -c 5 $i
done

Примечание: не сковывать скобки, нет запятых (,) между IP-адресами.

Надеюсь, что это поможет.

Пример:

[raja @ scripts]$ cat ping.sh
for i in 74.125.236.70  98.139.183.24  65.55.206.228  91.189.94.156 198.252.206.24
do
ping -c 5 $i 
done 
[raja @ scripts]$ ./ping.sh
PING 74.125.236.70 (74.125.236.70) 56(84) bytes of data.
64 bytes from 74.125.236.70: icmp_seq=1 ttl=128 time=11.5 ms
64 bytes from 74.125.236.70: icmp_seq=2 ttl=128 time=11.0 ms
64 bytes from 74.125.236.70: icmp_seq=3 ttl=128 time=10.9 ms
64 bytes from 74.125.236.70: icmp_seq=4 ttl=128 time=16.5 ms
64 bytes from 74.125.236.70: icmp_seq=5 ttl=128 time=18.2 ms

--- 74.125.236.70 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4025ms
rtt min/avg/max/mdev = 10.966/13.682/18.291/3.120 ms
PING 98.139.183.24 (98.139.183.24) 56(84) bytes of data.
64 bytes from 98.139.183.24: icmp_seq=1 ttl=128 time=244 ms
64 bytes from 98.139.183.24: icmp_seq=2 ttl=128 time=253 ms
64 bytes from 98.139.183.24: icmp_seq=3 ttl=128 time=255 ms
64 bytes from 98.139.183.24: icmp_seq=4 ttl=128 time=251 ms
64 bytes from 98.139.183.24: icmp_seq=5 ttl=128 time=243 ms

--- 98.139.183.24 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4251ms
rtt min/avg/max/mdev = 243.511/249.623/255.275/4.674 ms
PING 65.55.206.228 (65.55.206.228) 56(84) bytes of data.
From 10.22.96.94 icmp_seq=5 Packet filtered

--- 65.55.206.228 ping statistics ---
5 packets transmitted, 0 received, +1 errors, 100% packet loss, time 14002ms

PING 91.189.94.156 (91.189.94.156) 56(84) bytes of data.
64 bytes from 91.189.94.156: icmp_seq=1 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=2 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=3 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=4 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=5 ttl=128 time=240 ms

--- 91.189.94.156 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4242ms
rtt min/avg/max/mdev = 240.060/240.222/240.309/0.626 ms
PING 198.252.206.24 (198.252.206.24) 56(84) bytes of data.
64 bytes from 198.252.206.24: icmp_seq=1 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=2 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=3 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=4 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=5 ttl=128 time=242 ms

--- 198.252.206.24 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4251ms
rtt min/avg/max/mdev = 237.600/238.575/242.291/1.933 ms
0
ответ дан 24 May 2018 в 12:20
  • 1
    вы не показывали реализацию с помощью cron, как указано в вашем Q .. также как этот скрипт уведомит результат запросов ping. – precise 31 January 2014 в 11:35
  • 2
    Я упомянул, что хочу только сценарий. Крон не входит в вопрос. Крон сказал, почему мне нужен этот сценарий и amp; упомянуть о цели этого сценария, как о работе cron. – Ten-Coin 31 January 2014 в 11:37
  • 3
    @hash Попробуйте, прежде чем спросить моего дорогого друга. Спасибо, что посмотрели. – Ten-Coin 31 January 2014 в 11:38
  • 4
    Я никогда не говорил, что сценарий не сработает. Но поскольку ваш Q упоминает работу cron, вам нужно будет сообщить пользователю результат работы, или вы предлагаете что-то еще? – precise 31 January 2014 в 11:41
  • 5
    моя цель - работа cron, я имею в виду, почему мне нужен этот BASH-скрипт. Но мое требование - bash @hash – Ten-Coin 31 January 2014 в 11:49

Другие вопросы по тегам:

Похожие вопросы: