Я нашел сценарии, которые говорят, что они проверяют подключение к Интернету. Некоторые проверяют IP-адрес, если интерфейс работает, НО он не проверяет интернет-соединение. Я нашел некоторые, которые используют ping, как это: if [ 'ping google.com -c 4 | grep time' != "" ]; then
но иногда это может быть ненадежным, так как сам ping может зависнуть по какой-то причине (например, ждать некоторого зависания ввода-вывода).
Любые предложения о правильном / надежном способе проверки подключения к Интернету с использованием сценариев? Должен ли я использовать некоторые пакеты?
Он должен иметь возможность периодически проверять, cron
например, затем делать что-то, когда соединение обрывается, как invokeifup --force [interface]
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'
>/dev/null
>/dev/null
перенаправляет стандартный вывод/dev/null
на нулевое устройство , которое избавляется от него, так как в этом случае оно нежелательно (все, что нас интересует, это значения выхода команд). Вместо этого, более применимый вывод берется изecho
строк.Я настоятельно рекомендую против использования
ping
для определения подключения. Слишком много сетевых администраторов отключают ICMP (протокол, который он использует) из-за опасений по поводу пинг- атак, исходящих из их сетей.Вместо этого я использую быстрый тест надежного сервера на порте, который вы можете ожидать открыть:
При этом используется netcat (
nc
) в режиме сканирования портов , быстрый щелчок (-z
это режим с нулевым вводом-выводом [используется для сканирования] ) с быстрым таймаутом (-w 1
ожидание не более одной секунды). Он проверяет Google на порт 443 (HTTPS).Я использовал HTTPS, а не HTTP, чтобы защитить от порталов и прозрачных прокси, которые могут отвечать на порт 80 (HTTP) для любого хоста. Это менее вероятно при использовании порта 443, поскольку будет несоответствие сертификата, но это все же произойдет.
Если вы хотите защитить себя от этого, вам необходимо проверить безопасность соединения:
Это проверяет соединение (а не ожидает, когда openssl истечет время ожидания), а затем выполняет SSL-квитирование, вводя ключ на этапе проверки. Он тихо завершает работу («истина»), если проверка прошла «ОК», либо завершается с ошибкой («ложь»), тогда мы сообщаем об обнаружении.
источник
-d
Например, добавьтеnc -dzw1
также, чтобы он не слушал STDIN и не зависал в скрипте. и, возможно, используйте 8.8.8.8 вместо google.com для сохранения поиска.nc -dzw1 8.8.8.8 443
-d
в моих сценариях, возможно, потому что у меня никогда не было неиспользованного конвейера. Это должно быть безопасно добавить.-w 1
все еще стоит секунду, когда нет соединения, хотя, возможно, у васnc
есть какая-то неясная проблема где-то здесь. Если у вас установлена последняя версия nmap, вы можете вместо этогоncat --send-only --recv-only -w 334ms
сократить время отказа до третиnc
(я обнаружил, что 334ms - это хорошее время ожидания).Я создал скрипт, который использует несколько способов проверки интернет-соединения (ping, nc и curl, спасибо Адаму Кацу, Жилю и Архемару). Я надеюсь, что кто-то найдет это полезным. Не стесняйтесь редактировать его по своему вкусу / оптимизировать.
Проверяет ваш шлюз, DNS и интернет-соединение (используя curl, nc и ping). Поместите это в файл и сделайте его исполняемым (обычно
sudo chmod +x filename
)источник
$GW
?/sbin/ip route | awk '/default/ { print $3 }'
получает адрес шлюза из (надеюсь) основного интерфейса. При желании вы можете установить IP-адрес шлюза самостоятельно.Есть много IP-адресов в Интернете, легкий подход состоит в том, чтобы пинговать некоторые из них
более полным ответом может быть получение страниц с использованием
wget
где
источник
Благодаря вашему вкладу от каждого пользователя и других веб-пользователей мне удалось выполнить этот скрипт за 3 дня. и я оставлю это бесплатно для его использования.
Этот скрипт автоматизирует обновление IP-адреса при потере соединения, он делает это постоянно.
pastebin: https://pastebin.com/wfSkpgKA
источник
eth0
, но это не упоминается.) (2) Использование английского языка. (3) Поместить все переменные оболочки (например"$HOST"
,"$LINE1"
и"$LOG"
) в двойные кавычки. (4) Либо установите,LINE2
либо не используйте его. (Я подозреваю , что вы получилиLINE1
/LINE2
путать сinet4
/inet6
.) ... (продолжение)