Интеллектуальные методы обнаружения подключения к Интернету на устройстве со встроенным Linux

StackOverflow https://stackoverflow.com/questions/1468038

Вопрос

Наша команда занимается разработкой устройства Internet Media на базе Linux 2.6.В настоящее время мы определяем, установлено ли подключение к Интернету (через проводной интерфейс Ethernet), проверяя связь www.google.com.

Некоторые сети, в которых мы тестировали устройство, не поддерживают пересылку пакетов ICMP, поэтому код нашего приложения в этом случае ошибочно сообщает, что Интернет недоступен.

Кто-нибудь знает более совершенный подход к определению доступности подключения к Интернету через /dev/eth0, не прибегая к проверке связи с известным сервисом?

Это было полезно?

Решение

Как парень, написавший ответ, на который ссылается ChristopheD, я бы здесь не использовал такой подход.Это сработало для другого вопроса, потому что в этом случае мы проверяли наличие прямого соединения PPP с текущей машины - в этом случае вы подключены к произвольной сети, которая может иметь или не иметь маршрут по умолчанию, независимо от более широкого подключения к Интернету.

Поскольку для вашего приложения вам необходимо глобальное подключение DNS, я бы проверил это — найдите адрес, который, как вы знаете, всегда будет существовать — например, NS введите запрос для com. домен.Используйте достаточно длительный тайм-аут и/или повторите попытку несколько раз, прежде чем сдаться.Что-то вроде этого:

dig NS +aaonly com.

Проигнорируйте выходные данные и проверьте значение выхода — 0 указывает, что поиск смог связаться с корневыми серверами, а все остальное — нет.

Другие советы

В конечном итоге вы хотите, чтобы устройство могло использовать Интернет для каких-то полезных функций.Если существует четко определенный сервер, к которому обычно подключается устройство, было бы полезно отправить на него запрос.

Между «ничего» и «полезной функцией» есть много шагов, и вы потенциально можете проверить любой из них как некоторую меру «связности»:

  • Кабель Ethernet подключен (или установлено соединение PPP, или Wi-Fi, независимо от того, какой у вас нижний уровень)
  • Адрес, назначенный DHCP-сервером (если применимо)
  • Шлюз по умолчанию работает
  • DNS-сервер отвечает
  • Целевой сервер отвечает (возможно, не ICMP-пинг, а небольшой HTTP-запрос или любой другой протокол, который вы можете использовать)

В зависимости от того, насколько сообразительный ваш клиент или если вам нужна полезная ошибка/диагностика, о которой он может сообщить в службу технической поддержки, может быть полезно обнаружить все это.

Также может быть полезно иметь возможность использовать трассировку в качестве диагностического инструмента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top