# Руководство &lisa;

Alexander
Neundorf

    neundorf@kde.org

Олег
Баталов

    batalov@twiga.kz

Перевод на русский
2001
Alexander Neundorf
2001-07-07
0.01.00

&lisa; предназначена для показа сетевого окружения, работает только поверх протокола TCP/IP и не зависит от SMB и других служб.

Это руководство описывает Информационный сервер LAN (&lisa;) и Ограниченный информационный сервер (&reslisa;)

KDE
kdenetwork
LAN
network
network neighborhood

## Введение

&lisa; предназначена для показа сетевого окружения, работает только поверх протокола TCP/IP и не зависит от SMB и других служб.

Она полностью независима от &kde;/&Qt;.

Список работающих серверов предоставляется через порт 7741 протокола TCP.

&lisa; поддерживает два способа поиска компьютеров в сети:

1. Вы указываете &lisa; диапазон адресов IP, тогда &lisa; посылает эхо-запрос ICMP по всем указанным адресам IP, и ожидает ответов.

2. Вы можете указать &lisa; выполнить команду `nmblookup` с опцией `"*"`. Это утилита командной строки, поставляемая вместе с пакетом Samba. `nmblookup` `"*"` посылает широковещательные запросы в доступные сети, и все компьютеры, на которых работает сервер SMB, отвечают на этот запрос.

## Как это работает

В конфигурационном файле вы указываете диапазон IP-адресов, которые сервис &lisa; должен проверять на работоспособность.

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

Сервера проверяются с использованием эхо-запросов ICMP. Чтобы иметь возможность посылать и принимать эхо-запросы ICMP программа должны открыть так называемый raw-сокет. Для этого необходимы привилегии пользователя root. Этот сокет открывается при запуске программы, после успешного открытия сокета привилегии root будут немедленно понижены (смотрите файлы `main.cpp` и `strictmain.cpp`).

Если вы настроили &lisa; на использование команды `nmblookup`, будет выполнен `popen("nmblookup \"*\"")` и проанализированы его результаты.

Так как запросы ICMP и широковещательные запросы генерируют некоторый сетевой трафик, существует возможность завести более одного работающего сервера а сети и они будут сотрудничать друг с другом. Перед отправкой запросов (либо использованием команды `nmblookup`), посылается широковещательный запрос на порт 7741.

Если кто-то ответил на этот широковещательный запрос, список работающих серверов будет получен через порт 7741 протокола TCP с этого сервера и эхо-запросы (либо команда `nmblookup`) выполнятся не будет.

Если никто не ответил, сервер, который послал широковещательный запрос, начинает посылать эхо-запросы (либо выполнить программу `nmblookup`) и откроет сокет, который принимает широковещательные запросы. Если сервер получил ответ на свой широковещательный запрос, он не открывает сокет. Так что обычно только один сервер открывает сокет и только он фактически проверяет доступность других серверов (либо выполняет `nmblookup`).

Другими словами, сервера ленивы, они действуют по принципу: Я сделаю что-то только если никто этого ещё не сделал.

Есть и другая возможность уменьшения сетевого трафика.

Если вы настроили интервал обновления &lisa; каждые 10 минут, то вы не обращаетесь к серверу слишком часто. Если никто не обращался к серверу за предыдущий период обновления, сервер обновит (самостоятельно или от того, что кто-то выполнит обновление вручную) и удвоит свой интервал обновления. &ie; следующее обновление произойдёт через 20 минут.

Такое происходит 4 раза, так что если никто долго не обращался к серверу с периодом обновления 10 минут, его интервал обновления увеличится до 160 минут (три часа). Теперь, если кто-либо обращается к серверу, он получит устаревший список (обновлённый 160 минут назад). При запросе к серверу он восстановит значение интервала в первоначальные &ie; 10 минут и немедленно начнёт обновление, если последнее обновление было раньше 10 минут назад. Это означает, что вы получаете устаревший список и можете попробовать через несколько секунд получить последние данные.

Это приведёт к повышению частоты обновления для серверов, которые не пингуют (либо используют nmblookup) другие сервера, поскольку к ним обычно обращается только один пользователь. И меньший эффект будет достигнут на серверах, которые выполняют пинги (либо используют nmblookup), так как к ним обращаются все другие.

При этом варианте возможна ситуация, когда в сети работают множество серверов и в ней сохраняется небольшой трафик. Для пользователя не важно, какие сервера работают в сети (&ie; сервер имён, файловый сервер либо другой), в которой используется &lisa;. Он всегда может запустить &lisa; локально и &lisa; определит, что он один, совершенно прозрачно для пользователя.

Первый клиент &lisa; входил в ioslave для &kde; 2, так что пользователь может ввести `lan://localhost/` либо `lan:/` для использования результатов &lisa; на своём компьютере.

Если есть компьютер, работающий постоянно, и пользователь знает, что на нём выполняется &lisa;, он может воспользоваться им явно (через ioslave `lan://the_server_name/`).

Если вы не хотите, чтобы ваш сервис &lisa; принимал участие в широковещательных рассылках, но всегда выполнял пингование непосредственно, укажите ему опцией командной строки `--port` либо `-p` использовать другой порт. Это не рекомендуется!

Если вы пошлёте сервису &lisa; сигнал `SIGHUP`, он перезагрузит свои параметры из файла конфигурации. Если вы пошлёте сервису &lisa; сигнал `SIGUSR1`, он выведет некоторую информацию о статусе на стандартный вывод.

Данные, предоставляемые через сокет, имею простой формат:`<десятичный адрес ip в сетевом порядке следования байтов>< один пробел 0x20><полное имя компьютера><завершающий '\0'><новая строка '\n'<` и последняя строка`0 succeeded<'\n'>`

Например,

    17302538 some_host.whatever.de
    18285834 linux.whatever.de
    17827082 nameserver.whatever.de
    0 succeeded

Это должно обеспечить лёгкость разбора.

Если в вашей сети существуют строгие правила по защите информации, некоторые люди могут посчитать пинги потенциальной атакой. Если столкнётесь с этим, используйте ограниченную версию сервиса, &reslisa;.

## &reslisa;

Если в вашей сети очень строгие правила безопасности, вы не хотите иметь открытый порт, или по другой причине вы можете использовать &reslisa;.

При использовании &reslisa; вы не можете проверять сети целиком и диапазоны адресов, вы можете указать в файле конфигурации до 64 компьютеров с их именами. Они будут проверены. Вы всё ещё можете использовать `nmblookup`.

&reslisa; предоставляет информацию только через unix-сокет, &ie; не через сеть. Имя сокета будет `/tmp/resLisa-ВашеИмяПользователя`, так что &reslisa; может безопасно выполняться на компьютере с большим количеством пользователей.

Установка прав root на &reslisa; не должно вызвать проблем безопасности, так как они будут сразу понижены после запуска (смотрите файл `strictmain.cpp`). Эти права необходимы только при создания низкоуровневого сокета для отправки эхо-запросов ICMP.

Сервис также не будет посылать и принимать широковещательные пакеты. Первый клиент этого сервиса - ioslave для &kde; 2 (например, введите `rlan:/` в &konqueror;).

## Файл конфигурации

Теперь пример файла конфигурации:

    PingAddresses = 192.168.100.0/255.255.255.0;192.168.100.10-192.168.199.19;192.168.200.1;192-192.168-168.100-199.0-9;
    PingNames = bb_mail;
    AllowedAddresses = 192.168.0.0/255.255.0.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                # использовать nmblookup
    FirstWait = 30                          # 30 сотых секунды
    SecondWait = -1                         # только одна попытка
    #SecondWait = 60                        # пробовать дважды, и ожидать во второй раз 0.6 секунды
    UpdatePeriod = 300                      # период обновления, секунд
    DeliverUnnamedHosts = 0                 # не показывать компьютеры без имени
    MaxPingsAtOnce = 256                    # посылать до 256 эхо-запросов ICMP за один раз

### `PingAddresses`

Это вероятно самый важный параметр.

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

Есть четыре возможных способа указания адресов:

адрес сети/маска сети

  192.168.100.0/255.255.255.0, &ie; адрес IP и назначенная маска сети.

  Это не должно быть адресом сети и маской сети вашей машины. Например, если ваш адрес 10.0.0.0/255.0.0.0, вы могли бы указать 10.1.2.0/255.255.255.0, если вы интересуетесь этими адресами. Комбинация адрес IP и сетевая маска должны быть разделены косой чертой / и это не должен быть реальный адрес. Он может быть адресом компьютера в сети, &ie; 10.12.34.67/255.0.0.0 тоже самое что и 10.0.0.0/255.0.0.0 .

диапазон адресов IP

  Например: 192.168.100.10-192.168.199.19

  Начальный адрес IP и конечный адрес IP.

  Адреса должны быть разделены -.

  В этом примере мы указываем 199-100+1=100, 100*256=25.600, 25.600+(19-10+1)=25.590 адресов

Адрес IP, представленный диапазоном в каждом четырёх десятичных номеров

  Адрес IP, представленный четырьмя десятичными числами, и вы можете указать диапазон для каждого из них: 192-192.169-171.100-199.0-9

  В этом примере будут проверены все адреса IP с первым номером 192, вторым в диапазоне от 168 до 168, третьим от 100 до 199, и последним от 0 до 9. Это -- 1*1*100*10=1.000 адресов.

  Такое указание диапазона используется в очень редких случаях. Здесь мы указали диапазоны для каждого из четырёх чисел, всегда разделяемые символом -.

Одиночные адреса IP или имена компьютеров

  Адреса IP либо имена компьютеров, которыми вы наиболее часто интересуетесь.

Оставить этот параметр пустым тоже будет корректным.

### `PingNames`

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

Оставить этот параметр пустым тоже будет корректным.

### `AllowedAddresses`

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

Например, 192.168.0.0/255.255.0.0;192.169.0.0

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

### `BroadcastNetwork`

Этот параметр содержит только один адрес/маску сети. По нему будут посылаться широковещательные запросы. Обычно это должно быть вашим адресом/маской, например, 192.168.0.0/255.255.0.0

### `SearchUsingNmblookup`

Здесь вы можете указать `0` или `1`. При использовании `1` &lisa; выполнит программу `nmblookup` `"*"` и проанализирует её вывод. Это создаёт меньше трафика, чем при использовании пингов, но вы получите только список компьютеров, на который выполняется сервис SMB (компьютеры с &Windows; или с запущенным сервисом samba).

Если вы установите этот параметр и укажите адреса IP для пингов, сперва будет выполнена команда `nmblookup`, затем пинги. При этом будут пропингованы адреса, которые не проверила программа `nmblookup`. Это немного уменьшает сетевой трафик.

### `FirstWait`

Когда &lisa; выполняет пинг, &ie; когда посылаются эхо-запросы ICMP, отправляется сразу пакет запросов, и ответы будут ожидаться в течении указанного количества сотых секунды. Обычно значение от 5 до 50 должны быть оптимальными, максимальное - 99 (0.99 секунды, очень длительный интервал). Попробуйте сделать это значение как можно более маленьким, при котором все компьютеры в сети определяются.

### `SecondWait`

После того, как &lisa; пошлёт эхо-запрос в первый раз, может случиться, что некоторые компьютеры не были найдены. Улучшить результаты &lisa; может, пропинговав их второй раз. Будут проверены только те компьютеры, которые не ответили при первом опросе. Если первый опрос даёт хорошие результаты, вы можете отключить повторную проверку установкой значения SecondWait в `-1`.

Хорошая идея -- сделать это значение немного большим, чем для `FirstWait`. Компьютеры, которые не были найдены в первый раз, вероятно, используют медленные линии связи или расположены дальше, и им необходимо больше времени для ответа. Обычно значения от 5 до 50 должны быть оптимальными, либо установите -1 для отмены повторного сканирования. Максимальное значение - 99 (0.99 секунды, очень продолжительный интервал).

### `UpdatePeriod`

Интервал, через который &lisa; будет производить обновление. По истечению этого времени &lisa; снова пошлёт пинги, использует `nmblookup` либо запросить список у другого сервера &lisa;, который фактически выполняет пинги.

Допустимое значение в диапазоне от 20 до 1800 секунд (полчаса). Если ваша сеть велика, не устанавливайте небольшой интервал (чтобы сохранить невысокую загрузку сети). Значения от 300 до 900 секунд (5 и 15 минут) -- наиболее хороший вариант.

Имейте ввиду, что период обновления удваивается до 4 раз, если никто не обращается к серверу, пока не достигнет 16-кратного значения. Он будет сброшен до указанного здесь значения, если кто-то обратиться к серверу.

### `DeliverUnnamedHosts`

Если был получен ответ на эхо-запрос с адреса IP, для которого &lisa; не смог определить имя, он будет послан через порт, если вы установите этот параметр в 1.

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

### MaxPingsAtOnce

При отправке пингов (эхо-запросов) &lisa; посылает несколько пакетов как один и ожидает ответов. По умолчанию это 256 пингов за раз, обычно вам не нужно изменять это значение. Если вы установите его значение слишком большим, внутренний буфер ответов на эхо-запросы может отказаться слишком мал. Если вы сделаете его небольшим, обновление будет происходить медленней.

### Ещё три примера файлов

#### FIXME

Вы член небольшой сети с сетевой маской в 24 бита, &ie; до 256 компьютеров:

    PingAddresses = 192.168.100.0/255.255.255.0
    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 0                         # не использовать nmblookup
    FirstWait = 20                                   # 20 сотых секунды
    SecondWait = 30                                  # 30 сотых секунды при второй попытке
    UpdatePeriod = 300                               # период обновления 300 секунд
    DeliverUnnamedHosts = 0                          # не публиковать компьютеры без имени

#### Файл конфигурации для компьютера, на котором выполняется только SMB

Вы интересуетесь только компьютерами с работающим сервисом SMB и в вашей сети нет маршрутизации:

    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                # использовать nmblookup
    UpdatePeriod = 300                      # период обновления 300 секунд
    DeliverUnnamedHosts = 0                 # не публиковать компьютеры без имени

#### Файл конфигурации, использующий `nmblookup` и пинги

Та же самая сеть, но в ней используются пинги и nmblookup.

    PingAddresses = 192.168.100.0/255.255.255.0
    PingNames = bb_mail
    AllowedAddresses = 192.168.0.0/255.255.0.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                # сначала использовать nmblookup
    FirstWait = 30                          # 30 сотых секунды
    SecondWait = -1                         # только одна попытка
    #SecondWait = 60                        # пробовать дважды, и второй раз ожидать 0.6 секунды
    UpdatePeriod = 300                      # период обновления 300 секунд
    DeliverUnnamedHosts = 0                 # не публиковать компьютеры без имени
    MaxPingsAtOnce = 256                    # посылать до 256 эхо-запросов ICMP за один раз

#### Файл конфигурации для &reslisa;

И теперь файл конфигурации для &reslisa;. В &reslisa; PingAddresses и BroadcastNetwork не используется.

    PingNames = bb_mail;some_host;some_other_host
    AllowedAddresses = 192.168.0.0/255.255.0.0
    SearchUsingNmblookup = 1                # использовать nmblookup
    FirstWait = 30                          # 30 сотых секунды
    SecondWait = -1                         # только одна попыткаn#SecondWait = 60                        # пробовать дважды, и второй раз ожидать 0.6 секунды
    UpdatePeriod = 300                      # период обновления 300 секунд
    DeliverUnnamedHosts = 1                 # публиковать компьютеры без имени
    MaxPingsAtOnce = 256                    # посылать до 256 эхо-запросов ICMP за один раз

## Опции командной строки и дополнительные параметры

Поддерживаются следующие опции командной строки:

`-v`, `--version`

  Показать номер версии

`-h`, `--help`

  Показать описание всех опций командной строки

`-u`, `--unix`

  Сначала искать настройки в `$`HOME`/.lisarc`, затем в `/etc/lisarc`. Это поведение по умолчанию.

`-k`, `--kde1`

  Сначала искать настройки в `$`HOME`/.kde/share/config/lisarc`, затем `$`KDEDIR`/share/config/lisarc`.

`-K`, `--kde2`

  Искать файл настроек `lisarc` в каждом каталоге, возвращённом программой ``kde-config` `--path` `config``

`-c`, `--config=``ФАЙЛ`

  Использовать `ФАЙЛ`, а не другой файл конфигурации.

`-p`, `--port` `НОМЕР_ПОРТА`

  Запустить сервер на указанном порту. Если вы это используете, сервис &lisa; не сможет сотрудничать с другими серверами &lisa; в сети. Эта опция для &reslisa; недоступна.

Если вы пошлёте &lisa; или &reslisa; сигнал Hangup, они заново загрузят свои файлы конфигурации (``killall` `-HUP lisa``).

Если вы посылаете &lisa; или &reslisa; сигнал User1, они выводят на стандартный вывод терминала некоторую информацию о состоянии (``killall` `-USR1 lisa``). Вы ничего не увидите, если закрыли консоль, с который была запущена &lisa;/&reslisa;.

## Авторы и лицензия

Авторское право на &lisa; и &reslisa; 2000, 2001, Alexander Neundorf

Перевод на русский: Олег Баталовbatalov@twiga.kz

Alexander Neundorf neundorf@kde.org

&underFDL; &underGPL;

## Установка

Для &lisa; и &reslisa; необходима библиотека libstdc++ (используется только string-class), они не требуют ни установленного &Qt; ни &kde;.

&install.compile.documentation;

### Другие зависимости

И &reslisa; и &lisa; открывает так называемый низкоуровневый (raw) сокет для отправки и приёма эхо-запросов ICMP. Для этого необходимы привилегии пользователя root.

&lisa; запускает сервис на порту 7741 протокола TCP и должна запускаться с правами пользователя root при старте системы. Как достичь этого, зависит от вашей &OS;.

Сервис &reslisa; предназначен для выполнения под правами любого пользователя и не требует активного использования сети. У сервиса должен быть установлен флаг setuid root.

Если вы используете ioslave `rlan` в &kde; 2, сервис &reslisa; будет запущен автоматически.

&lisa; использует файл настроек `lisarc`, &reslisa; - `reslisarc`. Если вы хотите настроить их с помощью &kcontrol;, вы должны использовать опцию командной строки `-K`.

Более подробную информацию о расположении файлов конфигурации читайте в главе .