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.