Как можно проверить подключение к Интернету без проверки связи с веб-сайтом? Я имею в виду, что если соединение есть, но сайт не работает? Есть ли проверка на связь с миром?
bash
connection
ping
Lauriys
источник
источник
Ответы:
Без пинга
-q : режим без звука
--spider : не получайте, просто проверьте доступность страницы
$? : код возврата оболочки
0 : код оболочки "Все ОК"
Без wget
источник
nc
чтобы убедиться, что он истек . что-то вродеnc google.com 80 -w 10
Пингуйте свой шлюз по умолчанию:
источник
function ping_gw() { ... && return 0 || return 1 }
а затем использовать так:ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
и у меня все еще есть шлюз по умолчанию, и он доступен для проверки связи, хотя я фактически не могу связаться с внешним миром.Супер Спасибо пользователю somedrew за их сообщение здесь: https://bbs.archlinux.org/viewtopic.php?id=55485 от 20.09.2008 02:09:48
Вот мой сценарий для проверки сетевого подключения, кроме петли. Я использую приведенный ниже сценарий в другом сценарии, который у меня есть для периодического тестирования доступности моего веб-сайта. Если он НЕ доступен, всплывающее окно предупреждает меня о проблеме.
Приведенный ниже сценарий не позволяет мне получать всплывающие сообщения каждые пять минут, если мой ноутбук не подключен к сети.
Примечание для новичков в bash: последний оператор if проверяет НЕ [!] Онлайн и завершает работу, если это так. См. Man bash и поиск по запросу «Выражения могут быть объединены» для получения более подробной информации.
PS Я считаю, что пинг - не лучшее, что можно здесь использовать, потому что он направлен на проверку соединения с конкретным хостом, а НЕ на проверку наличия соединения с какой- либо сетью .
PPS. Вышеупомянутое работает в Ubuntu 12.04. / Sys может не существовать в некоторых других дистрибутивах. Увидеть ниже:
источник
cat /sys/class/net/wwan0/carrier
Не работает на ubuntu 14.04 LTS.2>/dev/null
после,cat /sys/class/net/$interface/carrier
чтобы не выводить ошибку в случае, если сеть отключена.Это работает как на MacOSX, так и на Linux:
источник
ping: invalid option -- w
)fping google.com
или простоfping 8.8.8.8
творит чудеса с бонусом, вы получаете код статуса без необходимости его проверять ("google.com is alive
") ...В Bash, используя сетевую оболочку через / dev / { udp , tcp } / host / port :
(
:
это запрет на Bash, потому что вы просто хотите проверить соединение, но не обработку.)источник
Раньше я писал сценарии, которые просто используют telnet для подключения к порту 80, а затем передают текст:
за которыми следуют две последовательности CR / LF.
Если вы получили ответ HTTP в той или иной форме, вы можете предположить, что сайт работает.
источник
Главный ответ упускает из виду тот факт, что у вас может быть совершенно стабильное соединение со своим шлюзом по умолчанию, но это не означает, что вы автоматически можете получить доступ к чему-то в Интернете. ОП спрашивает, как он / она может проверить связь с миром. Поэтому я предлагаю изменить главный ответ, изменив IP-адрес шлюза на известный IP-адрес (xyzw), который находится за пределами вашей локальной сети.
Итак, ответ будет таким:
Также удаление нежелательных обратных кавычек для подстановки команд [1] .
Если вы просто хотите убедиться, что вы подключены к миру, прежде чем выполнять какой-то код, вы также можете использовать:
источник
убедитесь, что ваша сеть разрешает входящий и исходящий трафик TCP, тогда вы можете вернуть свой общедоступный IP-адрес с помощью следующей команды
источник
Выполните следующую команду, чтобы проверить, работает ли веб-сайт и какое сообщение о состоянии показывает веб-сервер:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
Код состояния «200 OK» означает, что запрос выполнен и веб-сайт доступен.
источник
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Если ваш локальный сервер имен не работает,
- это легко запоминающийся всегда активный IP (на самом деле это даже сервер имен).
источник
Топ проголосовали ответ не работает для MacOS так и для тех , кто на макинтош, я успешно проверил это:
протестировано на MacOS High Sierra 10.12.6
источник
route
команду на,route -n get default 2> /dev/null | grep gateway
чтобы избежать записи ошибки в stderr в автономном режиме.Этот сценарий bash постоянно проверяет наличие Интернета и издает звуковой сигнал, когда Интернет доступен.
источник
кратчайший путь:
fping 4.2.2.1
=> «4.2.2.1 жив»Я предпочитаю это, так как это более быстрый и менее подробный вывод, чем
ping
недостаток в том, что вам придется его установить.вы можете использовать любые общедоступные DNS, а не конкретный веб-сайт.
fping -q google.com && echo "do something because you're connected!"
-q
возвращает код выхода, поэтому я просто показываю пример запуска того, что вы в сети.установить на макинтош:
brew install fping
; в Ubuntu:sudo apt-get install fping
источник
Ping был разработан, чтобы делать именно то, что вы хотите. Однако, если сайт блокирует эхо-запрос ICMP, вы всегда можете подключить telnet к порту 80 какого-либо сайта, wget или curl.
источник
Еще один способ сделать это - проверить индексную страницу Google:
источник
Подобно ответу @ Jesse , этот вариант может быть намного быстрее, чем любое
ping
другое решение, и, возможно, немного более эффективным, чем ответ @ Jesse .Explenation:
Эта команда использует
find
with-exec
для запуска команды для всех файлов, не названных*lo*
в/sys/class/net/
. Это должны быть ссылки на каталоги, содержащие информацию о доступных сетевых интерфейсах на вашем компьютере.Выполняемая команда - это
sh
команда, которая проверяет содержимое файлаcarrier
в этих каталогах. Значение$interface/carrier
имеет 3 значения - Цитата :Первый вариант не рассматривается в ответе @Jesse .
sh
Команда полосатая из вне:cat
используется для проверки содержимогоcarrier
и перенаправления всего вывода на стандартный вывод, даже если он терпит неудачу из-за того, что файл не читается. Если среди этих файловgrep -q
обнаруживается"1"
, это означает, что подключен как минимум 1 интерфейс. Код выходаgrep -q
будет последним кодом выхода.использование
Например, используя статус выхода этой команды, вы можете использовать ее для запуска gnubiff в вашем
~/.xprofile
только если у вас есть подключение к Интернету.Ссылка
/sys/class/net/
источник
Понг не означает, что на сервере запущена веб-служба; это просто означает, что сервер отвечает на эхо ICMP. Я бы рекомендовал использовать curl и проверить его возвращаемое значение.
источник
Если ваша цель действительно проверить доступ к Интернету , многие из существующих ответов на этот вопрос ошибочны. Вам следует знать несколько вещей:
Имея это в виду, я считаю, что лучшая стратегия - связаться с несколькими сайтами через HTTPS-соединение и вернуть true, если какой-либо из этих сайтов отвечает.
Например:
Использование:
Некоторые примечания об этом подходе:
источник
if wait $pid;
. Понятия не имею, почему это не работает в вашей системе. Вы уверены, что используете bash?wait
и понял, что код возврата действительно тестируется. Я повторно скопировал ваш код, и сегодня он работает - упс! Должно быть, я что-то напортачил в прошлый раз, хотя не могу понять, что и как. Тем не менее, я виноват. Извинения.С помощью этой команды:
.
источник
Это заметно быстрее, чем любое решение, размещенное здесь, и его также можно использовать для тестирования конкретного хоста .
Уловка состоит в том, чтобы определить IP-адрес с помощью менее загруженного DNS-решателя, чем тот, который используется
ping
:источник