Тестирование блока ICMP
В моих скриптах bash я использовал что-то вроде:
until fping -u google.com; do echo "$0[$$] Network/DNS down?? $(date)" 1>&2 && sleep $(($RANDOM%(1 + ++trynum * 1) +1)).222; done
проверить подключение к сети.
Он останавливается на месте, спя растя случайными интервалами, пока не сможет снова пропинговать google.com.
Проблема: в некоторых локальных сетях ICMP-запросы вообще блокируются, хотя веб-страницы по-прежнему доступны. Какой короткий путь для тестирования в этом общем случае (брандмауэр снаружи)?
На основании этого теста я переключусь на http-тест, такой как статус выхода
curl -s google.com >/dev/null
если это хорошо.
2 ответа
Использование curl довольно расточительно. Просто используйте вместо этого tcping.
Другие варианты, если у вас нет этого:
curl -sI -m 2 http://www.google.com >/dev/null
echo 'HEAD / HTTP/1.0\r\nHost: www.google.com\r\n\r\n' | nc www.google.com 80 >/dev/null
Основная идея состоит в том, чтобы установить TCP-соединение с портом 80 и посмотреть, удастся ли это.
Если какой-либо сервер блокирует запросы ICMP, вы все равно можете проверить, доступен ли веб-сервер при сканировании короткого порта, например, с помощью nmap:
nmap -PN -T4 -p 80 your_webserver 2>&1 | grep -wi open >/dev/null || date