В этой статье представлены несколько простых скриптов сканирования и мониторинга сети с использованием комбинации команд bash и ping.
Очевидно, что эти скрипты не подходят в сравнении со специализированным программным обеспечением для полного мониторинга, такого как например nagios:
Но они могут быть полезны для небольших домашних сетей, где внедрение сложной системы мониторинга может быть накладным.
Сканирование подсети
В этом примере bash скрипт просканирует сеть на предмет хостов, подключенных по IP-адресам 10.1.1.1 – 255.
Скрипт выведет сообщение Хост с с IP: IP-адрес поднят, если команда ping была успешной.
Не стесняйтесь изменять скрипт для сканирования диапазона ваших хостов.
#!/bin/bash
is_alive_ping()
{
ping -c 1 $1 > /dev/null
[ $? -eq 0 ] && echo Хост с IP: $i поднят.
}
for i in 10.1.1.{1..255}
do
is_alive_ping $i & disown
done
Выполнение:
Вывод:
Хост with IP: 10.1.1.1 поднят.
Хост with IP: 10.1.1.4 поднят.
Хост with IP: 10.1.1.9 поднят.
Уведомление по почте, когда сервер не работает
Пример скрипт №2 отправит электронное письмо на указанный адрес электронной почты, когда ping не может достичь места назначения.
Системный администратор может регулярно выполнять этот скрипт с использованием планировщика cron.
Сначала скрипт использует команду ping для проверки связи с хостом или IP-адресом, указанным в качестве аргумента.
В случае, если это место назначения недоступно, будет использована команда mail для уведомления системного администратора об этом событии.
#!/bin/bash
for i in $@
do
ping -c 1 $i &> /dev/null
if [ $? -ne 0 ]; then
echo "`date`: ping не прошел, $i хост лежит !" | mail -s "$i хост лежит!" admin@itsecforu.ru
fi
done
Выполнение:
./check_hosts.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100
Создать логи мониторинга
Последний пример – это модифицированная версия предыдущего примера.
Если в системе не настроена почта, скрипт создаст файл логов.
Ядро скрипта заключено в бесконечный цикл while, который настроен на выполнение проверки ping каждый час (3600 секунд).
Измените скрипт в соответствии с вашими потребностями.
Удалите бесконечный цикл while, если вы собираетесь использовать этот скрипт с планировщиком cron.
#!/bin/bash
LOG=/tmp/mylog.log
SECONDS=3600
EMAIL=admin@itsecforu.ru
for i in $@; do
echo "$i-UP!" > $LOG.$i
done
while true; do
for i in $@; do
ping -c 1 $i > /dev/null
if [ $? -ne 0 ]; then
STATUS=$(cat $LOG.$i)
if [ $STATUS != "$i-DOWN!" ]; then
echo "`date`: ping неудачен, $i хост лежит!" |
mail -s "$i хост лежит!" $EMAIL
fi
echo "$i-DOWN!" > $LOG.$i
else
STATUS=$(cat $LOG.$i)
if [ $STATUS != "$i-UP!" ]; then
echo "`date`: пинг прошел, $i Хост подня!" |
mail -s "$i Хост поднят !" $EMAIL
fi
echo "$i-UP!" > $LOG.$i
fi
done
sleep $SECONDS
done
Выполнение:
./check-server-status.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100