ping кілька IP-адрес, використовуючи bash?


17

У мене є 10 IP-номерів, які мені щодня доводиться писати для перевірки. Як це зробити за допомогою сценарію BASH. Так що я можу автоматизувати це завдання за допомогою cron. Я хочу лише сценарій BASH.

Дякую.


Нижче відповіді я згадав IP-адреси Google, yahoo, msn тощо. Я сам це спробував. Вставте {} і, тут не працюють між IP-адресами, щоб розділити їх. сподіваюся, що це може допомогти комусь у майбутньому. Дякую за прочитане
rɑːdʒɑ

Відповіді:


18

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

10.12.13.14
172.15.48.3
192.168.45.54
...
48.114.78.227

Ви можете використовувати цей сценарій,

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

Щоб оновити робочий стан ваших вузлів з інтервалом в 30 хвилин, скористайтеся програмою crontab,

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

Вихід log.txt

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

це не те, чого ви очікували?
souravc

це здається саме тому, що ОР слід шукати .. а оскільки веб-сайти, такі як google.com, yahoo.com тощо, використовують декілька серверів для обробки запитів, було б краще прописати їх своїми доменними іменами (так що, можливо, ви не зможете доведеться змінити IP-адресу в своєму ping-списку найближчим тижнем) ..
точно

Чудово працює, я розмістив трохи змінену відповідь, яку використовую в середовищі Travis CI.
MitchellK


1

Перевірте цей сценарій.

   #!/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, і луна відповість, якщо ping у порядку, і не відповість, якщо ні.

Примітка: Ви можете замінити $ 1 $ 2 $ 3 статичними змінними, якщо діапазон і IP-адреси завжди однакові.


IP не з одного діапазону. ось такі критерії. будь-який спосіб дякую за відповідь. + 1
rɑːdʒɑ

ОК, будь ласка, вкажіть це у своєму запитанні. Дякую за +
Maythux

Акуратний і простий сценарій, який може бути дуже корисним (наприклад, на вбудованих пристроях), навіть якщо він не відповідає на 100% умовам питання. Дякую тобі. +1 заслужено.
Sopalajo de Arrierez

1

Припустимо, що у вас є 5 IP-адрес (щоб зменшити лише відповідь), тоді ви можете пінг з ними

#!/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

ви не показали реалізацію cron, як згадувалося у вашому Q .. також, як би цей скрипт повідомив результат запитів ping ..
точно

Я згадав, що хочу лише сценарій. Cron не є частиною питання. Cron згадав, чому мені потрібен цей скрипт, і щоб згадати про цілі цього сценарію, як він як робота з кроном.
rɑːdʒɑ

@hash Спробуйте, перш ніж запитати мого дорогого друга. Дякую, що подивилися.
rɑːdʒɑ

Я ніколи не говорив, що сценарій не буде працювати .. але, як згадується ваша Q cron, потрібен засіб повідомити користувача про результат завдання, чи ви пропонуєте щось інше?
точно

моє призначення - це робота з крон, я маю на увазі, чому мені потрібен цей сценарій BASH.але моя вимога - bash @hash
rɑːdʒɑ

1
echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1

або з грепом, дивіться лише вузли, що не належать до ping

echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 | grep -b1 100

1

Добре

Простий як: Використовуйте 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.