Кратко о том чего хочу:
Хочу сделать скрипт на Шелле, который пингует группу адресов, и в случае отсутствия ответа от всей группы - тушить данную машину.Я не прошу готового решения, прошу подтолкнуть меня в нужном направлении, объяснить каким образом можно это реализовать.
Я никак не могу придумать каким образом проверять именно группу адресов. Можно конечно через if else, что-то типа:
if не пингуется первый адрес then
if не пингуется второй адрес then
но это-же полнейшее извращение - так делать неправильно. Прошу совета.
http://fping.sourceforge.net/"fping is different from ping in that you can specify any number of hosts on the command line, or specify a file containing the lists of hosts to ping."
> http://fping.sourceforge.net/
> "fping is different from ping in that you can specify any number
> of hosts on the command line, or specify a file containing
> the lists of hosts to ping."По описанию - именно то что нужно. Пойду эксперементировать.
Спасибо.
При проверке отключенных хостов появляется вот такая бяка:ICMP Redirect from 192.168.1.1 for ICMP Echo sent to 192.168.1.10
где:
192.168.1.1 - маршрутизатор, которого я вообще не трогал
192.168.1.10 - компьютер, который я проверялИ мало того - это сообщение появляется даже при:
fping -a 192.168.1.10 > /dev/null
то есть я вывод команды в черную дыру направляю, а мне оно все равно пишет.
Соответственно написанный мной скрипт с использованием fping получился неработоспособный.
> При проверке отключенных хостов появляется вот такая бяка:
>ICMP Redirect from 192.168.1.1 for ICMP Echo sent to 192.168.1.10Возможно, что у тебя маршрут в свою же сетку не описан или описан криво, всё валится на default router. Тот переправил куда положено, о чём тебе и прислал ICMP редирект.
> И мало того - это сообщение появляется даже при:
>fping -a 192.168.1.10 > /dev/null
> то есть я вывод команды в черную дыру направляю, а мне оноУ команды есть минимум два вывода - stdout (№1) и stderr (№2). Сообщения об ошибках и предупреждения принято писать в stderr. Перехватывать их можно 2> /dev/null, но не нужно - они тебе не мешают.
> Соответственно написанный мной скрипт с использованием fping получился
> неработоспособный.Скорее всего ты в другом месте накосячил. Продолжай ковыряться - разберёшься. Только теорию почитай.
Уже исправил, еще вчера. Покопался в sysctl - отключил "ICMP routing redirects", так что все уже работает нормально.Кому интересно - это делаем так:
net.inet.icmp.drop_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0
Забыл дописать, а править сообщение не могу - нашел в чем ошибка была:
Оказывается что fping возвращает немного непредсказуемый для меня результат. Даже если хоть один хост не пингуется, то "$?" не будет равно нулю - не пингуется только один, или все, мы все равно будем получать "$? -ne 0". В моем случае мне нужно отловить момент когда не пингуются все. Пришлось грепом пользоваться.