GUESSNET(8)

НАЗВАНИЕ
guessnet - определяет, к какой локальной сети подключен сетевой интерфейс

ОБЗОР
guessnet [опции] [сетевой_интерфейс]

ОПИСАНИЕ
guessnet определяет, к какой локальной сети подключен сетевой интерфейс. Указывается список профилей-кандидатов, для каждого из которых указывается описание теста. guessnet запускает параллельно все эти тесты и выводит имя профиля, чей тест первый завершился успешно. Если ни один из тестов не завершился успешно в течение указанного тайм-аута, выводится имя профиля по умолчанию. После вывода имени профиля, guessnet немедленно завершает все тесты ещё продолжающие работу и выходит.

Профили-кандидаты читаются либо из файла описания тестов, либо, при использовании ifupdown, из файла /etc/network/interfaces.

ОПЦИИ
Опции следуют обычным соглашениям GNU. При использовании ifupdown, опции также могут быть поданы на стандартный ввод, в виде "<длинное-название-опции>: <значение>".

-C, --config-file=имя_файла
    Имя используемого файла конфигурации, если ничего не указано в командной строке. По умолчанию: стандартный ввод или /etc/network/interfaces при использовании ifupdown.

--autofilter
    Используется только при совместной работе с ifupdown (смотрите ниже). Указывает guessnet только имена логических интерфейсов, которые совпадают с началом имени физического интерфейса. (Например: eth0-home совпадает только с eth0) По умолчанию отключено: false.

--debug
    Выводить отладочные сообщения.

-d, --default=строка
    Имя интерфейса, которое нужно вывести, если не была найдена ни одна из известных сетей. По умолчанию пусто: none.

--help
    Показать краткий итог по опциям из командной строки.

-i, --ifupdown-mode
    Работать совместно с ifupdown: обработать ввод в формате /etc/network/interfaces или прочитать из файла /etc/network/interfaces, если имя_файла конфигурации не указано. За более подробной информацией обратитесь к разделу об использовании ifupdown.

--init-time=целое
    Сколько секунд ждать инициализации интерфейса, если он не был найден ещё при запуске программы. Default: 3 seconds.

--init-delay=целое
    Уснуть на указанное количество секунд перед запуском операций. Может быть полезно в случае если драйверу нужно немного времени для подготовки к приёму команд. По умолчанию: 0 секунд.

--iwscan-tries=целое
    Количество попыток сканирования беспроводных сетей. Полезно в тех случаях, когда драйвер требует несколько попыток для получения списка сетей. По умолчанию: 1.

--syslog
    Выводить сообщения не только на стандартный поток диагностики, но и через syslog, с использованием средства DAEMON.

-t, --timeout=целое
    Количество секунд для ожидания завершения тестов. По умолчанию: 5 секунд.

-v, --verbose
    Выводить подробные сообщения.

--version
    Показать номер версии программы.

ФАЙЛ ОПИСАНИЯ ТЕСТОВ
guessnet получает на вход описания тестов, которые необходимо произвести. Описание тестов выглядит следующим образом:
  # Пустые строки и строки, начинающиеся с символа '#', игнорируются.
  # Другие строки содержат:
  #   <имя-профиля> <метод-тестирования> <параметры>
  # В домашней сети искать узел с указанными IP- и MAC-адресами
  home peer 192.168.1.1 00:01:02:03:04:05
  # В университете проверить наличие одного из
  # следующих узлов
  university peer 130.136.1.1 05:06:03:02:01:0A
  university peer 130.136.1.2 15:13:B3:A2:2F:CD
  # Если партнёр не отвечает на ARP-пакеты, приходящие с IP-адреса 0.0.0.0,
  # тогда можно дополнительно указать используемы адрес источника
  university peer 130.136.1.2 15:13:B3:A2:2F:CD 130.136.1.250
  # Для рабочей сети используем самописный скрипт
  work command /usr/local/bin/check_work
  # Команды исполняются при помощи "sh -c", поэтому можно использовать синтаксис shell
  john-irda command grep -q `cat ~enrico/john-irda-id` /proc/net/irda/discovery
  # Название местности и имя интерфейса экспортируются в NAME и IFACE
  weirdnet command /usr/local/bin/weirddetect "$NAME" "$IFACE"
  # Профиль "none" выбирается, если сигнал сети не обнаружен
  # (то есть, кабель не вставлен в разъём)
  no-net missing-cable
  # Совпадает с беспроводной сетью с указанным essid
  home wireless essid Home
  # Можно искать совпадение по MAC-адресу точки доступа
  home wireless mac 01:02:03:04:0A:0B
  # Или по обоим сразу
  home wireless essid Home mac 01:02:03:04:0A:0B
  # Можно искать любую открытую сеть
  anyopen wireless open
Каждая строка, не являющаяся комментарием является тестом, который нужно выполнить.

Первое слово в строке - это имя, которое должно быть выведено в случае успешного завершения теста.

Второе слово - это тип теста.

Остаток строки содержит параметры выбранного теста; они сильно зависят от типа теста.

ИСПОЛЬЗОВАНИЕ IFUPDOWN
ifupdown, стандартная система настройки сети Debian, позволяет определять разные "логические интерфейсы" (имена для профилей конфигурации ifupdown) и для выбора одного из них для настройки сетевого интерфейса. Выбор может делегироваться внешней программе "отображения". В качестве такой программы можно использовать guessnet, если её запустить в режиме совместной работы с ifupdown. Программа guessnet запускается в режиме совместной работы с ifupdown, если она вызвана по имени guessnet-ifupdown или ей передана опция --ifupdown-mode.

В режиме совместной работы с ifupdown guessnet читает тесты из определения логического интерфейса в файле /etc/network/interfaces, а не из отдельного файла с описанием тестов.

В режиме совместной работы с ifupdown, если имена были переданы guessnet на стандартный ввод, то guessnet использует только указанные логические интерфейсы; в противном случае - используются все. Можно указать ifupdown передать необходимые данные на стандартный вывод guessnet при помощи директивы map. Обратитесь к странице руководства interfaces(5) за более подробной информацией. Если именам предшествует символ "!", то правило совпадения обращается, подразумевая что должны быть обработаны все логические интерфейсы, за исключением тех, которые указаны на стандартный ввод. Нельзя смешивать обычные и обращённые имена интерфейсов в одной директиве отображения. Замечание: при использовании опции autofilter (смотрите выше) можно расширять или ужимать автоматическое совпадение только указанными именами интерфейсов, как это описано.

Запомните, что нужно указывать полный путь к guessnet (/usr/sbin/guessnet-ifupdown), в противном случае он не запустится при загрузке системы, так как путь /usr/sbin больше не включается в переменную окружения PATH сценария инициализации сети. Также необходимо убедиться в том, что к этому времени /usr уже смонтирован.

В режиме совместной работы с ifupdown опции передаются на стандартный ввод guessnet в виде "<длинное-название-опции>: <значение>". Эта возможность предоставляется потому, что ifupdown не может передавать опции командной строки в сценарии отображения.

Если хотите, можете добавить слово test перед словом guessnet в /etc/network/interfaces.

ifupdown не позволяет, чтобы в файле /etc/network/interfaces было несколько опций, начинающихся с одного и того же слова. Чтобы обойти это ограничение, можно указать несколько строк test (или guessnet) с разными числовыми окончаниями (test1, test2 или guessnet1, guessnet2, и т.д.)

Вот пример файла /etc/network/interfaces, который может использоваться вместе с guessnet:
auto lo eth0
iface lo inet loopback
mapping eth0
	script /usr/sbin/guessnet-ifupdown
	# Сканировать все логические интерфейсы
	# Здесь можно задать дополнительные опции, например:
	# map timeout: 10
	# map verbose: true
	# map debug: true
	# map iwscan-tries: 23
	map default: none
mapping eth1
	script /usr/sbin/guessnet-ifupdown
	# Отключаем проверку открытых сетей. Просто закомментируйте, если
	# вы достаточно безрассудны :) (смотрите ниже соответствующую строфу)
	map !eth1-anyopen
	# Сканировать только логические интерфейсы с именами eth1-*
	map autofilter: true
iface home inet static
	address 192.168.1.2
	netmask 255.255.255.0
	broadcast 192.168.1.255
	gateway 192.168.1.1
	# Строки для resolvconf (если вы его используете: смотрите apt-cache show resolvconf)
	# dns-search casa
	# dns-nameservers 192.168.1.1 192.168.2.1
	# Два теста, на случай если один из двух компьютеров выключен во время тестирования
	test1 peer address 192.168.1.1 mac 00:01:02:03:04:05
	test2 peer address 192.168.1.3 mac 00:01:02:03:04:06
iface work inet static
	address 10.1.1.42
	netmask 255.255.255.0
	broadcast 10.1.1.255
	gateway 10.1.1.1
	test command /usr/local/bin/check_work
iface work2 inet static
	address 192.168.2.23
	netmask 255.255.255.0
	broadcast 192.168.2.255
	gateway 192.168.2.1
	# Указываем исходный адрес в том случае, если партнёр
	# не отвечает на ARP-пакеты, пришедшие с IP-адреса 0.0.0.0
	test peer address 192.168.2.1 mac 00:01:02:03:04:05 source 192.168.2.23
iface eth1-home inet static
	wireless-essid Home
	wireless-key s:myverysecret
	address 192.168.1.5
	netmask 255.255.255.0
	gateway 192.168.1.1
	dns-nameservers 192.168.1.1
	# Совпадает с беспроводной сетью с указанным essid
	test wireless essid Home
	# Вы также можете указать MAC-адрес точки доступа
	#test wireless mac 01:02:03:04:0A:0B
	# Или оба сразу
	#test wireless essid Home mac 01:02:03:04:0A:0B
iface eth1-work inet dhcp
	wireless-essid Work
	wireless-key s:myverysecretkey
	# Совпадает с беспроводной сетью с указанным essid
	# Если в essid есть пробелы, используйте двойные кавычки
	test wireless essid "Work place"
iface eth1-anyopen inet dhcp
	# Можно использовать любую открытую сеть, если вы безрассудны :)
	wireless-essid any
	wireless-mode auto
	test wireless open
# Если ничего не нашлось, пробуем DHCP
iface none inet dhcp

Поддерживаемые тесты

  peer

Синтаксис файла описания тестов:
    профиль peer IP-адрес [MAC-адрес] [IP-адрес]

Синтаксис при совместном использовании с Ifupdown:
    test peer address IP-адрес [mac MAC-адрес] [source IP-адрес]

Описание:
    Поискать партнёра при помощи ARP. Тест считается пройденным, если сетевой интерфейс с указанным IP-адресом (и MAC-адресом, если указан) подключен к локальной сети.

    Можно опустить MAC-адрес, в таком случае guessnet тестирует только наличие узла сети с указанным IP-адресом.

    Если партнёр, существование которого вы хотите проверить, не отвечает на ARP-запросы, приходящие с IP-адреса 0.0.0.0, можно указать некоторый IP-адрес отправителя, запросы от которого принимаются.

    Можно указать несколько партнёров (в нескольких строках), но каждый партнёр должен иметь разный IP-адрес. Это ограничение может быть убрано в будущем.

    Вы также можете опустить IP-адрес и использовать только MAC-адрес: это полезно для проверки существования физических интерфейсов с меняющимися IP-адресами. В этом виде сканирования используется ICMP пакет для пинга, которому в большинстве случаев нужно указать адрес отправителя, потому что узлы не могут ответить на пинг, пришедший из ниоткуда.

  wireless

Синтаксис файла описания тестов:
    профиль wireless [essid essid] [mac MAC-адрес] [open|closed]

Синтаксис при совместном использовании с Ifupdown:
    test wireless [essid essid] [mac MAC-адрес] [open|closed]

Описание:
    Производит беспроводное сканировние, как это делает iwlist scan, а затем ищет совпадение результатов.

    Тест считается пройденным, если в процессе сканирования была обнаружена хотя бы одна сеть, для которой совпали все указанные параметры (essid, MAC-адрес точки доступа, признак открытой или закрытой сети).

    В том случае, если было найдено несколько подходящих профилей, будет использован первый из профилей в том порядке, в котором они были указаны в файле конфигурации. Таким образом можно выставлять приоритеты профилей. Например, вы можете предпочесть вашу домашнюю точку доступа открытой сети, указав её первой в файле конфигурации.

  missing-cable

Синтаксис файла описания тестов:
    профиль missing-cable

Синтаксис при совместном использовании с Ifupdown:
    test missing-cable

Описание:
    Проверка наличия кабеля. Тест считается пройденным, если кабель не найден.

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

    Этот тест также можно использовать совместно с ifupdown, если определён фиктивный логический интерфейс, включающий опцию test missing-cable. Подразумевается, что когда кабель отключен, ifupdown будет считать, что интерфейс должен быть настроен как этот фиктивный логический интерфейс. Это может показаться нелогичным, но в этом случае предпочтение будет отдано не настроенному состоянию. К несчастью, guessnet в настоящее время не может сообщить ifup воздержаться от настройки интерфейса. Однако, проблему может решить программа ifplugd(8).

    Определение состояния кабеля поддерживается не всеми сетевыми картами. Если интерфейс или драйвер не поддерживают определение наличия кабеля, этот тест не будет пройден.

  command

Синтаксис файла описания тестов:
    профиль command команда

Синтаксис при совместном использовании с Ifupdown:
    test command команда

Описание:
    Теститрование с помощью указанной команды. Тест считается успешно пройденным, если команда завершилась с кодом 0.

    Месторасположение и имя интерфейса передаются в скрипт через переменные окружения NAME и IFACE.

    Для обратной совместимости вместо command можно использовать script.

Экспериментальные проверки

  pppoe

Синтаксис файла описания тестов:
    профиль pppoe

Синтаксис при совместном использовании с Ifupdown:
    test pppoe

Описание:
    Использовать программу pppoe для отправки пакетов PADI для поиска концентраторов доступа. Тест должен быть успешным, если на данном интерфейсе есть модем PPPoE.

    Для использования этого теста в системе должна быть установлена программа pppoe.

  wireless

Синтаксис файла описания тестов:
    профиль wireless [mac MAC-адрес] [essid ESSID]

Синтаксис при совместном использовании с Ifupdown:
    test wireless [mac MAC-адрес] [essid ESSID]

Описание:
    Проверка соответствующих свойств беспроводного интерфейса. Конкретнее - проверка MAC-адреса и/или ESSID связанной точки доступа. Если указаны оба, тогда MAC-адрес должен предшествовать ESSID.

    В ESSID можно включать пробелы. Например:
        prof1 wireless essid My LAN
    проверит, что ESSID совпадает с "My LAN".

    Отметим, что тест wireless не пытается изменить эти свойства, он лишь проверяет их. Тест устроен так, чтобы он мог работать с программой waproamd, которая независимо и динамически управляет беспроводным сетевым интерфейсом так, чтобы он оставался связанным с точкой доступа.

    Отметим, что тест wireless реализован не полностью корректно.

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

ЗАМЕЧАНИЯ

  Получение MAC-адреса удалённого узла
При подготовке тестов для guessnet может понадобиться узнать MAC-адрес удалённого интерфейса локальной сети. Есть несколько разных способов чтобы его узнать. Простейший - воспользоваться программой arping, запустив "arping [имя_узла]". Если arping не установлен, попробуйте команду "arp -a [имя_узла]", которая покажет MAC-адрес, если он есть в таблице ARP вашего компьютера. Для уверенности в том, что нужная информация есть в таблице, перед этим можно пропинговать удалённый интерфейс. Ещё можно взглянуть на скрипт /usr/share/doc/guessnet/examples/getmac.

  Множественные проверки
В настоящее время guessnet позволяет указать только один вид проверки для каждого из профилей.

СМОТРИТЕ ТАКЖЕ
ifup(8), interfaces(5), arping(8), sh(1), pppoe(8), ifplugd(8).

АВТОР
guessnet был написан Энрико Зини (Enrico Zini) <enrico@debian.org> с доработками от Томаса Худа (Thomas Hood). Код обнаружения сети ARP был взят из laptop-netconf Мэта Керна (Matt Kern) <matt@debian.org>, который, в свою очередь, был основан на divine Феликса фон Лайтнера (Felix von Leitner) <felix@fefe.de>.

Веб-страница Guessnet находится по адресу http://guessnet.alioth.debian.org.

АВТОР ПЕРЕВОДА
Перевод на русский язык выполнил Владимир Ступин <wheel69@yandex.ru>.