1

В моих скриптах 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 ответа2

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 и посмотреть, удастся ли это.

1

Если какой-либо сервер блокирует запросы ICMP, вы все равно можете проверить, доступен ли веб-сервер при сканировании короткого порта, например, с помощью nmap:

nmap -PN -T4 -p 80 your_webserver 2>&1 | grep -wi open >/dev/null || date

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .