# Das Handbuch zu &lisa;

## Einleitung

&lisa; stellt eine Art von Netzwerkumgebung auf der Grundlage von TCP/IP bereit. Es wird weder SMB noch sonst etwas benötigt.

Es ist vollständig unabhängig von &kde;/&Qt;.

Die Liste der aktiven Rechner wird über TCP-Port 7741 bereitgestellt.

&lisa; kann Rechner auf zwei Arten finden:

1. Wenn man &lisa; einen Bereich von IP-Adressen gibt, sendet &lisa; eine Anforderung für ein ICMP-Echo an alle angegebenen IP-Adressen und erwartet die Antworten.

2. Gibt man die Befehlszeilenoption `"*"` an, so führt &lisa; den Befehl `nmblookup` aus. Der Befehl `nmblookup` gehört zum Samba-Paket, muss also aus diesem installiert werden. `nmblookup` `"*"` sendet ein Broadcast-Paket an alle erreichbaren Netzwerke und alle Rechner mit dem SMB-Protokoll antworten auf diese Anfrage.

## Wie &lisa; arbeitet

In der Einrichtungsdatei muss man einen Bereich von IP-Adressen angeben, der von &lisa; überprüft werden soll.

In den meisten Fällen handelt es sich dabei um die Netzwerkadresse/Teilnetz-Angabe. Damit überprüft &lisa; jeden Rechner des eigenen Teilnetzes, daraufhin, ob er läuft.

Die Rechner werden durch Anfrage eines ICMP-Echos überprüft. Damit ICMP-Echos versendet oder empfangen werden können, muss das Programm in der Lage sein, so genannte raw sockets zu öffnen. Dazu sind `root`-Rechte erforderlich. Diese socket wird direkt nach dem Programmstart geöffnet. Danach werden die root-Rechte automatisch zurückgegeben (siehe auch `main.cpp` und `strictmain.cpp`).

Wenn &lisa; so konfiguriert ist, dass es `nmblookup` verwendet, führt es den Befehl `popen("nmblookup\"*\"")` aus und wertet dessen Ergebnis aus.

Da ICMP-Anfragen und Broadcasts einigen Netzwerkverkehr verursachen, versuchen mehrere Server in einem Netzwerk zu kooperieren. Vor einem Ping (oder `nmblookup`) senden sie einen Broadcast auf Port 7741.

Wenn ein Rechner auf dieses Broadcast antwortet, wird die Liste der laufenden Rechner über TCP-Port 7741 von diesem Rechner bezogen und kein Ping (oder `nmblookup`) durchgeführt.

Falls kein Rechner antwortet, beginnt der ursprüngliche Rechner, die anderen Rechner anzupingen (oder `nmblookup` zu senden) und öffnet eine Socket, die auf die oben genannten Broadcasts reagiert. Wenn der Rechner eine Antwort auf das Broadcast erhält, öffnet er keine Socket, um auf Broadcasts zu reagieren. Daher sollte idealerweise immer genau ein Rechner diese Socket offen haben. Dieser Rechner ist der einzige, der die Ping-Anfragen ( oder `nmblookup`) durchführt.

Mit anderen Worten: die Server sind faul und arbeiten nach dem Prinzip Ich tue nur dann etwas, wenn sich wirklich niemand anderer findet, der diese Arbeit für mich erledigt.

Eine weitere Funktion soll die Netzwerkbelastung reduzieren.

Angenommen &lisa; wurde für ein zehnminütiges Aktualisierungsintervall konfiguriert. Wenn man nicht sehr häufig auf diesen Server zugreift, verändert er sein Aktualisierungsintervall selbstständig. Angenommen, während des gesamten Intervalls greift niemand auf den Server zu (weder vom eigenen Rechner noch von anderen Rechnern des Netzwerks). In diesem Fall wird die Aktualisierung durchgeführt und danach das Intervall verdoppelt, d.h. die nächste Aktualisierung findet nach 20 Minuten statt.

Das passiert insgesamt 4 mal, wenn also niemand den Server mit Aktualisierungsintervall 10 Minuten während eines langen Zeitraumes verwendet, steigt das Intervall auf maximal 160 Minuten, beinahe 3 Stunden. Falls dann jemand auf den Server zugreift, erhält er eine bis zu 160 Minuten alte Liste. Dieser Zugriff setzt das Aktualisierungsintervall wieder zurück auf 10 Minuten und startet sofort mit der Aktualisierung, wenn die Letzte mehr als 10 Minuten her ist. Wenn man also eine veraltete Liste erhält, kann man einige Sekunden später eine aktuelle Liste abrufen.

Das hat eine große Wirkung auf die Server, die nicht selbst Ping-Anfragen (oder `nmblookup`) senden, da sie nur von einem Benutzer verwendet werden, und kaum eine Wirkung auf den Server, der die Ping-Anfragen (oder `nmblookup`) durchführt, da dieser Server von allen anderen Servern des Netzwerkes abgefragt wird.

Auf diese Weise ist es möglich, das viele Rechner des Netzwerkes den Serverprozess starten und die Netzbelastung dennoch gering bleibt. Für den Benutzer ist es unerheblich zu wissen, ob es einen anderen Server (z.B. einen Name-Server oder File-Server oder Ähnliches) gibt, auf dem &lisa; läuft. Er kann &lisa; lokal starten und &lisa; findet selbstständig und unsichtbar für den Benutzer heraus, ob es einen aktiven Server gibt.

Das erste Client-Programm für &lisa; ist ein Ein-/Ausgabemodul für &kde; 2. Der Benutzer kann `lan://localhost/` oder `lan:/` eingeben, um Kontakt zu &lisa; auf dem lokalen System herzustellen.

Falls es einen Rechner gibt, der immer läuft und von dem der Benutzer weiß, dass er &lisa; gestartet hat, kann er seinen &lisa;-Client direkt mit diesem Server verbinden (mit dem genannten Ein-/Ausgabemodul durch `lan://Der_Servername/`).

Wenn man nicht möchte, dass &lisa; an Broadcasts teilnimmt sondern stattdessen immer selbst Ping-Anfragen durchführt, kann man die Befehlszeilenoption `--port` oder `-p` verwenden. Das ist aber nicht empfehlenswert!

Falls man ein `SIGHUP` an &lisa; sendet, liest das Programm die Einrichtungsdatei neu ein. Wenn man ein `SIGUSR1` an &lisa; sendet, werden einige Statusinformationen auf stdout ausgegeben.

Die Daten werden in einem einfachen Format über die Socket gesendet: `<Dezimale IP-Adresse in der Byteordnung des Netzwerkes><Ein Leerzeichen 0x20> <Name des Rechners><Ein abschließendes '\0'><Neue Zeile '\n'<` und die letzte Zeile `0 succeeded <'\n'>`

Zum Beispiel:

    17302538 Irgendein_Rechner.Irgendeine_Domain.de
    18285834 linux.Irgendeine_Domain.de
    17827082 nameserver.Irgendeine_Domain.de
    0 succeded

Das sollte leicht zu parsen sein.

Falls man sich in einem Netzwerk mit sehr strikten Sicherheitseinstellungen befindet, könnten einige Leute die Ping-Anfragen als einen möglichen Angriff auf den Rechner auffassen. Wenn man damit Probleme hat, sollte man die eingeschränkte Version &reslisa; verwenden.

## &reslisa;

Wenn im Netzwerk sehr strenge Sicherheitsvorschriften herrschen oder man keinen zusätzlichen Port geöffnet haben will, kann man &reslisa; verwenden.

Mit &reslisa; kann man keine ganzen Netzwerke oder Adressbereiche anpingen, man kann &reslisa; nur bis zu 64 Rechnernamen in der Einrichtungsdatei übergeben. Diese Rechner werden angepingt. Außerdem kann immer `nmblookup` verwendet werden.

&reslisa; stellt seine Informationen auch nur über eine lokale Socket bereit, also nicht über das Netzwerk. Der Name dieser Socket ist `/tmp/resLisa-Benutzername`, sodass mehrere Benutzer auf dem gleichen Rechner &reslisa; gleichzeitig verwenden können.

Da also kein Sicherheitsrisiko von &reslisa; ausgeht, kann das Programm setuid `root` installiert werden. `root`-Rechte werden direkt nach dem Programmstart wieder zurückgegeben (siehe auch `strictmain.cpp`). Sie werden nur benötigte, um eine Socket zum Senden der ICMP-Anfragen zu öffnen.

Das Programm sendet und empfängt keine Broadcasts. Der erste Client ist ebenfalls ein Ein/Ausgabe-Module für &kde; 2 (zum Beispiel `rlan:/` in &konqueror;).

## Die Einrichtungsdatei

Eine Beispiel-Einrichtungsdatei:

    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                #versuche auch nmblookup
    FirstWait = 30                          #30 hundertstel Sekunden
    SecondWait = -1                         #nur ein Versuch
    #SecondWait = 60                         #zwei Versuche mit 0.6 Sekunden Wartezeit dazwischen
    UpdatePeriod = 300                      #Aktualisierung alle 300 Sekunden
    DeliverUnnamedHosts = 0                 #Unbenannte Rechner nicht veröffentlichen
    MaxPingsAtOnce = 256                    #Maximal 256 ICMP-Anfragen gleichzeitig

### `PingAddresses`

Dies ist wohl der wichtigste Eintrag.

Hiermit werden die Adressen festgelegt, die angepingt werden sollen. Man kann mehrere durch Semikolon getrennte Bereiche angeben.

Es gibt vier Wege, Adressen festzulegen:

Netzwerkadresse/Netzwerkmaske

- 192.168.100.0/255.255.255.0, d.h. eine IP-Adresse und die zugehörige Netzwerkmaske.

  Dabei muss es sich nicht um die Netzwerkadresse und Netzmaske des eigenen Netzwerkes handeln. Wenn man zum Beispiel 10.0.0.0/255.0.0.0 als eigene Adresse hat, kann man 10.1.2.0/255.255.255.0 angeben, falls man nur an den Rechnern dieses Netzwerkes interessiert ist. Die Kombination aus IP-Adresse-Netzwerkmaske muss durch einen Schrägstrich / getrennt sein. Die Adresse muss auch keine Rechneradresse des gewünschten Netzwerkes sein, z.B. 10.12.34.67/255.0.0.0 bewirkt das Gleiche wie 10.0.0.0/255.0.0.0 .

ein Bereich von IP-Adressen

- Zum Beispiel: 192.168.100.10-192.168.199.19

  Eine IP-Adresse als Start des Bereiches und eine IP-Adresse als Ende des Bereiches, der angepingt wird.

  Die Adressen werden durch ein - voneinander getrennt.

  Der Bereich in diesem Beispiel enthält 199-100+1=100, 100*256=25.600, 25.600+(19-10+1)=25.590 Adressen

Ein IP-Adresse, die aus Bereichen der vier dezimalen Zahlen besteht

- Eine IP-Adresse wird als vier dezimale Zahlen dargestellt. Für jede dieser vier Zahlen kann getrennt ein Bereich angegeben werden: 192-192.169-171.100-199.0-9

  Bei diesem Beispiel beginnen alle IP-Adressen mit 192, die zweite Zahl liegt zwischen 169 und 171 einschließlich, die Dritte zwischen 100 und 199 und die letzte Zahl liegt zwischen 0 und 9 einschließlich. Das sind 1*3*100*10=3.000 Adressen.

  Diese Möglichkeit ist vermutlich nur in seltenen Fällen nützlich. Man muss immer Bereiche für alle vier Nummern angeben, jeweils getrennt durch -.

Einzelne IP-Adressen oder Rechnernamen

- Die IP-Adresse oder der Rechnernamen des Rechners, an dem man interessiert ist.

Dieser Eintrag kann auch leer gelassen werden.

### `PingNames`

Hier können zusätzlich Rechnernamen angegeben werden, die angepingt werden sollen. Die Namen müssen durch Semikolons getrennt werden.

Dieser Eintrag kann auch leer gelassen werden.

### `AllowedAddresses`

Diese Einstellung ist ebenfalls wichtig. &lisa; pingt nur Rechner an, akzeptiert Anfragen und antwortet auf Broadcasts, wenn der sendende Rechner im Bereich der erlaubten Adressen ist. Man kann bis zu 32 Netzwerkadressen/Netzwerkmasken oder einzelne Adressen angeben. Sie werden durch ; getrennt. Leerzeichen zwischen den Adressen sind nicht erlaubt!

Zum Beispiel: 192.168.0.0/255.255.0.0;192.169.0.0

Ein komplettes Netzwerk und eine einzelne Adresse sind möglich. Diese Einstellung sollte so restriktiv wie möglich sein. Die eigene Netzwerkadresse/Netzwerkmaske ist eine gute Einstellung.

### `BroadcastNetwork`

Hier kann genau eine Netzwerkadresse/Netzwerkmaske eingetragen werden. An dieses Netzwerk werden Broadcasts gesendet. Hier sollte die eigene Netzwerkadresse/Subnetzmaske eingetragen sein, also zum Beispiel: 192.168.0.0/255.255.0.0

### `SearchUsingNmblookup`

Hier kann man `0` oder `1` eintragen. `1` bedeutet, dass &lisa; den Befehl `nmblookup` `"*"` ausführt und die Ausgabe dieses Befehls auswertet. Das erzeugt weniger Netzwerkverkehr wie das Anpingen, aber nur Rechner, auf denen das SMB-Protokoll installiert ist (&Windows;-Rechner oder Rechner mit Samba), antworten auf diesen Befehl.

Wenn man diese Option auswählt und außerdem IP-Adressen zum Anpingen angibt, wird zuerst `nmblookup` ausgeführt, bevor das Pingen beginnt. Es werden nur die Adressen angepingt, die sich nicht schon auf den Befehl `nmblookup` gemeldet haben. Das verringert die Netzwerklast ein wenig.

### `FirstWait`

Wenn &lisa; pingt, also ICMP-Echo-Anfragen sendet, sendet &lisa; eine Anzahl Pings auf einmal und wartet dann die in Hundertstel Sekunden angegebene Zeit auf Antwort. Werte zwischen 5 und 50 sind geeignet. Die höchste Einstellung ist 99 (das entspricht 0,99 Sekunden, eine sehr lange Zeit). Dieser Wert sollte so klein wie möglich sein, sodass gerade noch alle Rechner rechtzeitig antworten können.

### `SecondWait`

Es kann sein, das nicht alle laufenden Rechner sich auf die erste Anfrage von &lisa; melden. Um das Resultat zu verbessern, kann &lisa; eine zweite Anfrage starten. Dieses Mal werden nur Rechner angepingt, die auf die erste Anfrage nicht geantwortet haben. Wenn man mit der ersten Anfrage bereits gute Resultate erzielt, kann man die zweite Anfrage deaktivieren, indem man SecondWait auf `-1` setzt.

Auf der anderen Seite kann es eine gute Idee sein, diesen Wert ein klein wenig höher zu wählen als den für `FirstWait`, da die im ersten Versuch nicht gefundenen Rechner vielleicht langsamer oder weiter entfernt sind und daher einige Millisekunden länger zur Antwort benötigen. Übliche Werte liegen zwischen 5 und 50. Durch -1 wird diese Option deaktiviert. Der Maximalwert ist 99 (0,99 Sekunden sind eine sehr lange Zeit).

### `UpdatePeriod`

Das Intervall, nach dem &lisa; seine Rechnerliste aktualisiert. Nach dieser Zeit startet &lisa; wieder ein Ping oder `nmblookup` oder lädt die Liste von dem &lisa;-Server, der das Anpingen durchführt.

Mögliche Werte liegen zwischen 30 Sekunden und 1800 Sekunden (eine halbe Stunde). Wenn man ein großes Netzwerk hat, sollte man das Intervall nicht zu klein machen (um die Netzwerkbelastung zu reduzieren). Werte zwischen 300 und 900 Sekunden (5 bis 15 Minuten) sind geeignet.

Man sollte daran denken, das sich das Aktualisierungsintervall bis zu viermal verdoppelt, wenn auf den Server nicht zugegriffen wird. Das Intervall kann also 19 Mal so groß werden wie der eingestellte Wert. Dieser Wert wird zurückgesetzt, sobald wieder jemand auf den Server zugreift.

### `DeliverUnnamedHosts`

Falls eine Echo-Anfrage von einer IP-Adresse empfangen wird, von der &lisa; den Rechnernamen nicht bestimmen kann, wird diese Adresse nur dann am Port ausgegeben, wenn diese Option auf 1 gesetzt ist.

Die Nützlichkeit dieser Funktion ist etwas umstritten. Sie wurde eingerichtet für &zb; Switches oder andere Geräte des Netzwerkes, denen keine Namen zugeordnet wurde und die nicht veröffentlicht werden müssen. Falls man diese Geräte geheim halten will ;-), sollte man die Option auf 0 setzen. Im Zweifelsfall sollte man die Option auf 0 setzen.

### MaxPingsAtOnce

&lisa; sendet eine Anzahl Pings gleichzeitig und wartet dann auf die Antworten. Standardmäßig werden 256 Pings auf einmal gesendet. Dieser Wert muss in der Regel nicht geändert werden. Falls man diesen Wert zu groß wählt, können die internen Empfangspuffer für die Echo-Anfragen zu klein werden, ein sehr kleiner Wert verlangsamt die Aktualisierung erheblich.

### Drei weitere Beispiele für Einrichtungsdateien

#### FIXME

Wenn man sich in einem kleinen Netzwerk mit 24-Bit-Netzmaske, also bis zu 26 Rechnern, befindet:

    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 nicht verwenden
    FirstWait = 20                                   #20 Hundertstel Sekunden
    SecondWait = 30                                  #30 Hundertstel Sekunden beim zweiten Versuch
    UpdatePeriod = 300                               #Aktualisierung 300 Sekunden
    DeliverUnnamedHosts = 0                          #Rechner ohne Namen werden nicht veröffentlicht

#### Einrichtungsdatei für Rechner, die lediglich SMB verwenden

Wenn man nur an Rechnern interessiert ist, die das SMB-Protokoll verwenden, und sich keine Router im Netzwerk befinden:

    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                #nmblookup verwenden
    UpdatePeriod = 300                      #rktualisierung nach 300 Sekunden
    DeliverUnnamedHosts = 0                 #Rechner ohne Namen werden nicht veröffentlicht

#### Einrichtungsdatei für sowohl `nmblookup` als auch Pingen

Das gleiche Netzwerk, aber sowohl nmblookup als auch Pingen wird verwendet.

    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 verwenden
    FirstWait = 30                          #30 sundertstel Sekunden
    SecondWait = -1                         #nur ein Versuch
    #SecondWait = 60                         #zwei Versuche und 0.6 Sekunden Wartezeit beim zweiten Versuch
    UpdatePeriod = 300                      #rktualisierung nach 300 Sekunden
    DeliverUnnamedHosts = 0                 #Rechner ohne Namen werden nicht veröffentlicht
    MaxPingsAtOnce = 256                    #bis zu 256 ICMP-Echo-Anfragen werden auf einmal gesendet

#### Einrichtungsdatei für &reslisa;

Eine Konfiguration für &reslisa;. PingAdresses und BroadcastNetwork wird von &reslisa; nicht verwendet.

    PingNames = bb_mail;irgendein_Rechner;irgendein_anderer_Rechner
    AllowedAddresses = 192.168.0.0/255.255.0.0
    SearchUsingNmblookup = 1                # nmblookup verwenden
    FirstWait = 30                          #30 Hundertstel Sekunden
    SecondWait = -1                         #yur ein Versuch
    #SecondWait = 60                         #zwei Versuche und 0,6 Sekunden Wartezeit beim zweiten Versuch
    UpdatePeriod = 300                      #rktualisierung nach 300 Sekunden
    DeliverUnnamedHosts = 1                 #Rechner ohne Namen werden auch veröffentlicht
    MaxPingsAtOnce = 256                    #bis zu 256 ICMP-Echo-Anfragen werden auf einmal gesendet

## Befehlszeilenoptionen und allgemeine Benutzung

Die folgenden Befehlszeilenoptionen werden unterstützt:

`-v`, `--version`

- Gibt kurze Versionsinformationen aus.

`-h`, `--help`

- Gibt einen Überblick über die Befehlszeilenoptionen

`-u`, `--unix`

- Zuerst nach der Datei `$`HOME`/.lisarc`, dann nach der Datei `/etc/lisarc` suchen. Das ist die Standardeinstellung.

`-k`, `--kde1`

- Zuerst nach der Datei `$`HOME`/.trinity/share/config/lisarc` suchen und dann nach `$`TDEDIR`/share/config/lisarc`.

`-K`, `--kde2`

- Nach der Datei `lisarc` in jedem vom Befehl ``tde-config` `--path` `config`` zurückgegebenen Ordner suchen.

`-c`, `--config=``DATEI`

- Die Datei `DATEI` einlesen und nicht nach anderen Einrichtungsdateien suchen.

`-p`, `--port` `PORTNR`

- Der Server wird auf diesem Port gestartet. Wenn man diese Option bei &lisa; verwendet, kann &lisa; nicht mit anderen Servern im Netzwerk kooperieren. Diese Option ist für &reslisa; nicht verfügbar.

Wird das Hangup-Signal an &lisa; oder &reslisa; gesendet, wird das Programm veranlasst, die Einrichtungsdatei neu einzulesen (``killall` `-HUP lisa``).

Wenn man das User1-Signal an &lisa; oder &reslisa; sendet, wird das Programm veranlasst, einige Statusinformationen an die Standardausgabe zu senden (``killall` `-USR1 lisa``). Ist die Konsole, von der &lisa;/&reslisa; gestartet wurde, schon beendet, ist die Ausgabe nicht sichtbar.

## Mitwirkende und Lizenz

&lisa; und &reslisa; Copyright 2000, 2001, Alexander Neundorf

Frank Schütte F.Schuette@t-online.de

Viel Spaß, Alexander Neundorf neundorf@kde.org

&underFDL; &underGPL;

## Installation

&lisa; und &reslisa; benötigen die Bibliothek libstdc++ (nur die String-Klasse wird verwendet). Weder &Qt; noch &kde; werden benötigt.

&install.compile.documentation;

### Andere Anforderungen

Sowohl &reslisa; als auch &lisa; öffnen eine so genannte raw socket für das Senden und Empfangen von ICMP-Echo-Anfragen (Pings). Dazu werden `root`-Rechte benötigt.

&lisa; bietet einen Service auf TCP-Port 7741 an und sollte von `root` installiert und beim Hochfahren des Systems gestartet werden. Wie das zu erreichen ist, hängt sehr vom jeweiligen Betriebssystem ab.

&reslisa; ist für den Start durch einen Benutzer programmiert, es bietet dem Netzwerk keinerlei Serverdienste an. Es muss mit setuid `root` installiert werden.

&reslisa; kann bei der Verwendung des Ein-/Ausgabemodul `rlan` von &kde; 2 automatisch gestartet werden.

&lisa; liest die Einrichtungsdatei `lisarc`, &reslisa; dagegen `reslisa`. Wenn man beide Programme von &kcontrol; konfigurieren will, muss man sie mit der Option `-K` starten.

Ein/Ausgabe-Modulenen zu den Einrichtungsdateien sind im Kapitel command-line-options zu finden.