2011-12-20 2 views
1

Есть ли функция Linux, эквивалентная InetIsOffline function in Windows (предоставленная url.dll), которая может рассказать мне, подключена ли система к Интернету, или мне нужно что-то приготовить?Есть ли эквивалент Linux для функции Windows InetIsOffline?

Причина, по которой я прошу, состоит в том, что я являюсь ранним усыновителем Lhogho. Я узнал, как это сделать в Windows и хотел разработать что-то, предлагающее такую ​​же функциональность в Linux.

+0

f рабочая станция знает о состоянии устройства, которое подключается к «Интернету». В наши дни это все меньше и меньше, поскольку модемы/маршрутизаторы берут на себя роль «конечной точки» (клиент DHCP, клиент PPPOE и т. Д., Чтобы разрешить несколько устройств), а не вашу собственную рабочую станцию, как это часто бывает используемый в модемные дни. –

+1

Какая абсурдная функция, которая (и также очень странно названа) ... Вы не должны проверять, подключены ли вы к Интернету (что, по сути, невозможно решить надежным способом), но если ресурс, который вы доступ к доступу и правильная обработка ошибок. Если вы хотите только проверить, доступен ли * какой-либо сайт, чем вы должны это проверить. –

+1

@ Никлас: Да, это абсурдно. Добро пожаловать в Windows. ;) – bugmagnet

ответ

1

Вы можете поговорить с диспетчером сети через D-Bus, чтобы узнать, связано ли что-либо, но кроме этого нет конкретного способа сделать это. И даже NM не всегда точна.

+1

, и многие системы вообще не управляют NM. –

1

Вы также можете разобрать какой-то файл под /proc/net/, таких как /proc/net/if_inet6 или /proc/net/tcp

Но почему вы хотите сделать это? Если вы хотите проверить доступность какого-либо сайта, просто используйте его программно (например, с помощью libcurl).

И действительно, некоторые сайты недоступны, а другие все еще работают.

0

Это может означать «у меня есть маршрут по умолчанию?», Или, по крайней мере, это будет разумная реализация, ИМХО. Итак, просто проверьте таблицу маршрутизации (/proc/net/route) для нее :).

Это, конечно же, не будет работать с IPv6 (вам нужно будет разобрать ipv6_route), но сложно решить, как это следует лечить. Возможно, исходный код Wine или документация MSDN могут пролить свет на этот вопрос.