Пинговать несколько IP-адресов с помощью bash?

У меня есть 10 IP-адресов, которые я должен ежедневно проверять для проверки, как я могу это сделать с помощью скрипта BASH. Так что я могу автоматизировать эту задачу с помощью cron. Мне нужен только сценарий BASH.

Спасибо.

Поскольку ваш диапазон ip-адресов не имеет симметрии и содержит всего 10 узлов, я бы предложил перечислить их в текстовом файле. Я рассматриваю файл, содержащий список, который list.txt который содержит список ip-адресов по одному в каждой строке, как показано ниже,

10.12.13.14172.15.48.3192.168.45.54...48.114.78.227

Вы можете использовать этот скрипт,

#!/bin/bash# Program name: pingall.shdatecat /path/to/list.txt |  while read outputdo    ping -c 1 "$output" > /dev/null    if [ $? -eq 0 ]; then    echo "node $output is up"     else    echo "node $output is down"    fidone

Чтобы обновлять состояние работы ваших узлов с интервалом в 30 минут, используйте at crontab,

*/30 * * * * /path/to/pingall.sh > /path/to/log.txt

Выход из log.txt

$ cat /path/to/log.txtFri Jan 31 15:06:01 IST 2014node 10.12.13.14 is upnode 172.15.48.3 is upnode 192.168.45.54 is up...node 48.114.78.227 is down

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

#!/usr/bin/bash    for i in xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxxx doping -c 5 $idone

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

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

От:

[raja @ scripts]$ cat ping.shfor i in 74.125.236.70  98.139.183.24  65.55.206.228  91.189.94.156 198.252.206.24doping -c 5 $i done [raja @ scripts]$ ./ping.shPING 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 ms64 bytes from 74.125.236.70: icmp_seq=2 ttl=128 time=11.0 ms64 bytes from 74.125.236.70: icmp_seq=3 ttl=128 time=10.9 ms64 bytes from 74.125.236.70: icmp_seq=4 ttl=128 time=16.5 ms64 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 4025msrtt min/avg/max/mdev = 10.966/13.682/18.291/3.120 msPING 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 ms64 bytes from 98.139.183.24: icmp_seq=2 ttl=128 time=253 ms64 bytes from 98.139.183.24: icmp_seq=3 ttl=128 time=255 ms64 bytes from 98.139.183.24: icmp_seq=4 ttl=128 time=251 ms64 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 4251msrtt min/avg/max/mdev = 243.511/249.623/255.275/4.674 msPING 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 14002msPING 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 ms64 bytes from 91.189.94.156: icmp_seq=2 ttl=128 time=240 ms64 bytes from 91.189.94.156: icmp_seq=3 ttl=128 time=240 ms64 bytes from 91.189.94.156: icmp_seq=4 ttl=128 time=240 ms64 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 4242msrtt min/avg/max/mdev = 240.060/240.222/240.309/0.626 msPING 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 ms64 bytes from 198.252.206.24: icmp_seq=2 ttl=128 time=237 ms64 bytes from 198.252.206.24: icmp_seq=3 ttl=128 time=237 ms64 bytes from 198.252.206.24: icmp_seq=4 ttl=128 time=237 ms64 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 4251msrtt min/avg/max/mdev = 237.600/238.575/242.291/1.933 ms
#!/bin/bashwhile read hostnamedoping -c 1 -t 1 "$hostname" > /dev/null 2>&1 && echo "Ping Status of $hostname : Success" || echo "Ping Status of $hostname : Failed" done < host.txt

$ кошка host.txt

host1.example.com192.168.0.1238.8.8.8......google.com

Видеть:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/

Что ж

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

Получите пример IP-адресов :

$ dig +trace google.com |ipx127.0.0.1127.0.0.1199.7.91.13199.7.91.13192.48.79.30192.48.79.30173.194.33.161173.194.33.165173.194.33.163173.194.33.164173.194.33.174173.194.33.160173.194.33.167173.194.33.166173.194.33.162173.194.33.169173.194.33.168216.239.32.10216.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 0msrtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 msPING 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 0msrtt min/avg/max/mdev = 0.017/0.017/0.017/0.000 msPING 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 0msrtt min/avg/max/mdev = 20.526/20.526/20.526/0.000 msPING 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

Проверьте этот сценарий.

   #!/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, например, это проверит IP-адреса с 192.168.1.0 на 192.168.1.10, и echo ответит, если ping в порядке, и не ответит, если нет.

ПРИМЕЧАНИЕ: Вы можете заменить $1 $2 $3 статическими переменными, если диапазон и IP-адреса всегда одинаковы.

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

Вот сценарий, который я написал после прочтения этого поста.

https://bitbucket.org/kurtjensen/nettest/src/master/

Он может использовать несколько текстовых файлов в качестве возможных конфигураций, а конфигурационные файлы дают вам возможность назвать ip-адрес более описательно. Примерами конфигурационных файлов являются

  • home.txt - Который используется по умолчанию
  • momdad.txt - Это для моих родителей.
  • и т.д.

Таким образом, я могу запустить скрипт дома и просто нажать enter в командной строке или ввести что-то вроде "momdad", чтобы переключиться на другую конфигурацию для другой сети.

Ниже ответа я упомянул IP-адреса Google, yahoo, msn и т.д. Я сам это пробовал. Вставка {} и , здесь не работают между IP-адресами, чтобы разделить их. надеюсь, это кому-нибудь поможет в будущем. Спасибо вам за чтение.