# Handbok &lisa;

## Inledning

&lisa; är tänkt att ge en sorts nätverksomgivning, men beror enbart på TCP/IP-protokollet, ingen smb eller något annat.

Den är fullständigt oberoende av &kde;/&Qt;.

Listan på värddatorer som är uppstartade tillhandahålls via TCP-porten 7741.

&lisa; stödjer två sätt att hitta värddatorer:

1. Du anger ett intervall med IP-adresser till &lisa;, därefter skickar &lisa; en ICMP-ekoförfrågning till alla angivna IP-adresser, och väntar på svar.

2. Du kan tala om för &lisa; att den ska köra `nmblookup` `"*"`. Kommandoradsverktyget från Samba-paketet `nmblookup` måste vara installerat. `nmblookup` `"*"` skickar en utsändning till de anslutna nätverken, och alla värddatorer som kör en SMB-tjänst svarar på utsändningen.

## Hur det fungerar

I konfigurationsfilen anger du ett interval av IP-adresser som &lisa; ska kontrollera för att se om de är startade.

I det enklaste fallet kan det här vara din IP-adress/undernätsmask. I så fall kontrollerar &lisa; varje möjlig värddator på nätverket för att se om de är startade.

Värddatorerna undersöks med ICMP-ekoförfrågningar. För att kunna skicka och ta emot ICMP-ekoförfrågningar och svar måste programmet öppna ett så kallat direktuttag (raw socket). Därför behöver det `root`-behörigheter. Det här uttaget öppnas direkt efter programmet har startat, och efter att ha öppnat uttaget med lyckat resultat, så släpps root-behörigheterna omedelbart (se `main.cpp` och `strictmain.cpp`).

Om du ställer in &lisa; så att den också använder `nmblookup`, kommer den att köra `popen("nmblookup \"*\"")` och sedan tolka resultaten.

Eftersom ICMP-förfrågningar och utsändningar kan orsaka en del nätverkstrafik om det finns mer än en sådan server som kör i ett nätverk, samarbetar servrarna med varandra. Innan de börjar göra anrop med ping (eller `nmblookup`), skickar de en utsändning på port 7741.

Om någon svarar på den här utsändningen, hämtar de den fullständiga listan på värddatorer som är startade via TCP-porten 7741 från den här värddatorn och börjar inte anropa med ping (eller `nmblookup`).

Om ingen svarar, så börjar värddatorn som skickade utsändningen att börja anropa värddatorer med ping (eller gör en `nmblookup`) och öppnar sedan ett uttag som lyssnar efter de ovannämnda utsändningarna. Om värddatorn tog emot ett svar på utsändningen, har den inte uttaget som lyssnar efter utsändningar öppet. Så vanligtvis har precis en av servrarna det här uttaget öppet och bara den här kommer verkligen att anropa med ping (eller göra en `nmblookup`) till värddatorerna.

Med andra ord så är servrarna lata, de arbetar enligt Jag gör bara något om ingen annan kan göra det åt mig.

Det finns en annan funktion som reducerar nätverksbelastningen.

Låt oss anta att du ställt in &lisa; att uppdatera var 10:de minut. Nu kommer du inte åt servern särskilt ofta. Om ingen kommer åt servern under den senaste uppdateringsperioden, kommer servern att uppdatera (antingen själv, eller från den som verkligen gör jobbet) och därefter dubblera uppdateringsperioden, dvs. nästa uppdatering kommer att ske om 20 minuter.

Det här händer fyra gånger, så om ingen kommer åt servern med en uppdateringsperiod på 10 minuter på länge, så ökas dess uppdateringsperiod till 160 minuter, nästan tre timmar. Om någon sedan kommer åt data från servern, får de en gammal lista (upp till 160 minuter gammal). När den har kommits åt återställer servern sin uppdateringsperiod till ursprungsvärdet, dvs. 10 minuter, och startar omedelbart en uppdatering om den senaste uppdateringen gjordes för mer än 10 minuter sen. Det här betyder att om du får en mycket gammal lista, kan du försöka igen om några sekunder, så ska du få en aktuell version.

Det här kommer att få en snabb effekt för servrarna, som inte anropar med ping (eller gör nmblookup) själva, eftersom bara en enda oftast kommer åt dem, och det har mindre effekt på servern som gör anropen (eller `nmblookup`), eftersom den här servern kan kommas åt av alla andra servrar i nätverket.

På det här sättet är det möjligt att många värddatorer i ett nätverk kör den här servern, men den totala belastningen förblir låg. För användaren är det inte nödvändigt att veta om det finns en server (dvs en namnserver eller filserver eller något annat) i nätverket som också kör &lisa;. Användaren kan alltid köra &lisa; lokalt och &lisa; upptäcker om det finns någon, transparent för användaren.

Den första klienten för &lisa; är en I/O-slav för &kde; 2, så användaren kan skriva in antingen `lan://localhost/` eller `lan:/` där, för att kontakta &lisa; på det egna systemet.

Om det finns en dator som kör hela tiden och användaren vet att den här datorn också kör &lisa;, kan &lisa;-klienten användas direkt med den här servern (alltså med den ovannämnda I/O-slaven `lan://server_namnet/`).

Om du inte vill att din &lisa; ska delta i utsändningen, utan alltid göra utsändningarna själv, använd en annan port med kommandoradsväljaren `--port` eller `-p`. Det här rekommenderas inte!

Om du skickar `SIGHUP` till &lisa;, läser den om sin konfigurationsfil. Om du skickar `SIGUSR1` till &lisa;, skriver den ut en del statusinformation på standardutmatningen.

Data som skickas via uttaget har ett enkelt format: `<decimal IP-adress i nätverkets byte-ordning><ett blanktecken 0x20><fullständigt namn på värddatorn><ett avslutande '\0'><nyrad '\n'<` och den sista raden `0 succeeded<'\n'>`

Till exempel,

    17302538 någon_värddator.någonstans.se
    18285834 linux.någonstans.se
    17827082 namnserver.någonstans.se
    0 succeeded

Det här bör göra den lätt att tolka.

Om det finns mycket strikta säkerhetsregler i ditt nätverk, kan några anse att anrop med ping är en potentiell attack. Om du har problem med det här, prova med den begränsade versionen, &reslisa;.

## &reslisa;

Om du har mycket strikta säkerhetsregler i ditt nätverk, eller om du inte vill ha en annan port öppen eller något annat, kan du använda &reslisa;.

Med &reslisa; kan du inte anropa hela nätverk och adressintervall med ping, utan du kan ge &reslisa; för närvarande upp till 64 värddatorer med namn i dess konfigurationsfil. Dessa kommer att anropas. Du kan fortfarande använda `nmblookup`.

&reslisa; skickar också endast informationen via ett uttag i Unix-domänen, dvs inte via nätverket. Namnet på uttaget är `/tmp/resLisa-DittInloggningsnamn`, så &reslisa; kan köras säkert av flera användare på samma dator.

Eftersom den inte bör kunna skapa en säkerhetsrisk av något slag är det säkert att installera &reslisa; setuid `root`. `root`-behörigheter släpps direkt efter uppstart (se `strictmain.cpp`), de behövs bara för att skapa ett direktuttag för att skicka ICMP-ekoförfrågningar.

Den skickar eller tar inte heller emot utsändningar. Den första klienten för den är en I/O-slav för &kde; 2 (till exempel `rlan://localhost/` i &konqueror;).

## Konfigurationsfilen

Här är ett exempel på en konfigurationsfil:

    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                #försök också med nmblookup
    FirstWait = 30                          #30 hundradels sekunder
    SecondWait = -1                         #bara ett försök
    #SecondWait = 60                         #försök två gånger, och vänta 0,6 sekunder andra gången
    UpdatePeriod = 300                      #uppdatera efter 300 sek
    DeliverUnnamedHosts = 0                 #visa inte värddatorer utan namn
    MaxPingsAtOnce = 256                    #skicka upp till 256 ICMP-ekoförfrågningar på en gång

### `PingAddresses`

Det här är troligen den viktigaste posten.

Här anger du vilka adresser som ska anropas med ping. Du kan ange flera intervaller, som avgränsas med semikolon.

Det finns fyra möjliga sätt att definiera adresser:

IP-adress/nätverksmask

- 192.168.100.0/255.255.255.0, dvs. en IP-adress och den tilldelade nätverksmasken.

  Det här behöver inte vara IP-adressen och nätmasken på din dator. Om du till exempel har 10.0.0.0/255.0.0.0 som din egen adress, skulle du kunna ange 10.1.2.0/255.255.255.0 om du bara är intresserad av de här adresserna. Den kombinerade IP-adressen och nätverksmasken måste avgränsas med ett snedstreck / och adressen behöver inte vara en riktig nätverksadress, den kan också vara en värddatoradress i det önskade nätverket, dvs.10.12.34.67/255.0.0.0 är samma sak som 10.0.0.0/255.0.0.0 .

ett intervall med IP-adresser

- Till exempel: 192.168.100.10-192.168.199.19

  En IP-adress där anrop med ping börjar och en annan IP-adress där anrop slutar.

  Båda adresserna måste vara avdelade med ett -.

  För det här exemplet skulle det resultera i 199-100+1 = 100, 100*256 = 25 600, 25 600+(19-10+1) = 25 590 adresser

En IP-adress, representerad med intervall för vart och ett av de fyra decimaltalen.

- En IP-adress kan representeras av sina fyra decimaltal, och du kan ange intervall för vart och ett av de här fyra talen: 192-192.169-171.100-199.0-9

  I det här exemplet kommer alla IP-adresser med det första talet 192, det andra talet från 168 till 168, det tredje talet från 100 upp till 199 och det sista talet från 0 upp till 9 att anropas med ping. Det här skulle ge 1*1*100*10 = 1 000 adresser.

  Det här är förmodligen bara användbart i ett fåtal fall. Här måste du ange intervall för vart fjärde tal, alltid avgränsade med -.

En enkel IP-adress eller ett värddatornamn

- IP-adressen eller värddatornamnet för någon dator som du är särskilt intresserad av.

Det är också giltigt att lämna den här posten tom.

### `PingNames`

Här kan du dessutom ange namn för värddatorer som ska anropas med ping. Namnen måste separeras med semikolon.

Det är också giltigt att lämna den här posten tom.

### `AllowedAddresses`

Det här är också mycket viktigt. &lisa; kommer bara att anropa adresser med ping, acceptera klienter och svara på utsändningar från adresser som täcks av adresserna som anges på den här raden. Du kan lägga till upp till 32 IP-adresser/nätmasker eller enskilda adresser. Separera dem med semikolon, och använd inga mellanslag mellan adresserna!

Till exempel, 192.168.0.0/255.255.0.0;192.169.0.0

Ett helt nätverk eller en enstaka adress är giltiga. Gör alltid detta så begränsat som möjligt, oftast är din IP-adress/delnätmask ett bra val.

### `BroadcastNetwork`

Den här posten innehåller precis en IP-adress/delnätmask. Utsändningar skickas till den här adressen. Vanligtvis ska det här vara din egen IP-adress/delnätmask, till exempel 192.168.0.0/255.255.0.0

### `SearchUsingNmblookup`

Här kan du ange `0` eller `1`. `1` betyder att &lisa; kör `nmblookup` `"*"` och tolkar utmatningen från det här kommandot. Det här ger mindre nätverkstrafik än anrop med ping, men du får bara reda på värddatorer som har en SMB-tjänst igång (&Windows;-datorer eller datorer som kör Samba).

Om du aktiverar det här alternativet, och dessutom anger IP-adresser för anrop med ping, så körs `nmblookup` först och sedan startar anropen. Då anropas bara adresser som inte redan härleddes från `nmblookup`. Det här borde minska nätverksbelastningen lite grand.

### `FirstWait`

Om &lisa; anropar med ping, dvs om den skickar ICMP-ekoförfrågningar, skickar det ett antal förfrågningar på en gång, och väntar sedan så många hundradels sekunder som du anger här. Oftast är värden från 5 till 50 bra, det maximala värdet är 99 (som ger 0,99 sekunder, en mycket lång tid). Försök att sätta det här värdet så lågt som möjligt medan fortfarande alla värddatorer som är startade hittas.

### `SecondWait`

Efter &lisa; har skickat ekoförfrågning för första gången, kan det vara möjligt att vissa värddatorer inte hittades. För att förbättra resultaten, kan &lisa; anropa en gång till. Den här gången anropas bara värddatorer som den inte fick något svar från. Om du får bra resultat med att anropa bara en gång, kan du stänga av den andra gången genom att ange `-1` för SecondWait.

Annars kan det vara en bra idé att göra det här värdet något större än värdet för `FirstWait`, eftersom de värddatorer som inte hittades vid första försöket troligen är långsammare eller längre bort så att de tar några millisekunder längre att svara. Oftast är värden från 5 till 50 bra, eller -1 för att stänga av den andra avsökningen. Det maximala värdet är 99 (som ger 0,99 sekunder, en mycket lång tid).

### `UpdatePeriod`

Det här är intervallet som &lisa; väntar innan en uppdatering. Efter den här tiden gör &lisa; ett anrop med ping eller `nmblookup` eller hämtar listan med värddatorer från &lisa;-servern som verkligen gör anropen.

Giltiga värde är mellan 30 sekunder och 1800 sekunder (en halvtimma). Om du har ett stort nätverk, gör inte intervallet för litet (för att hålla nätverksbelastningen låg). Värden från 300 till 900 sekunder (5 till 15 minuter) bör vara en bra idé.

Kom ihåg att uppdateringsperioden dubbleras om ingen kommer åt servern, upp till fyra gånger, så intervallet blir 16 gånger det värde som anges här och återställs till värdet som anges här om någon kommer åt servern.

### `DeliverUnnamedHosts`

Om ett svar på en ekoförfrågning tas emot från en IP-adress där &lisa; inte kan avgöra namnet, skickas den bara via porten om du ställer in det här till 1.

Jag är inte säker på att detta är en användbar funktion, men kanske finns det några infrastrukturenheter i nätverket som inte har namn tilldelade till sig, så att de inte behöver publiceras. Välj 0 här om du vill låta dem vara hemliga. Välj 0 om du är osäker.

### MaxPingsAtOnce

När &lisa; skickar anrop med ping (ekoförfrågningar), skickar den ett antal på en gång och väntar sedan på svaren. Normalt skickas 256 anrop på en gång, och du behöver oftast inte ändra på det här värdet. Om du gör det mycket större, kan de interna buffrarna för mottagning av svaren av ekoförfrågningar bli för små. Om du gör det för litet blir uppdatering långsammare.

### Ytterligare tre exempel på filer

#### ATT GÖRA

Du är medlem i ett litet nätverk med 24-bitars nätverksmask, dvs. upp till 256 värddatorer.

    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                         #använd inte nmblookup
    FirstWait = 20                                   #20 hundradels sekunder
    SecondWait = 30                                  #30 hundradels sekunder vid andra försöket
    UpdatePeriod = 300                               #uppdatera efter 300 sek
    DeliverUnnamedHosts = 0                          #visa inte värddatorer utan namn

#### Konfigurationsfil för värddatorer som bara kör SMB

Du är bara intresserad av värddatorer som kör SMB-tjänsten och du har inga routrar i nätverket.

    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                #använd nmblookup
    UpdatePeriod = 300                      #uppdatera efter 300 sek
    DeliverUnnamedHosts = 0                 #visa inte värddatorer utan namn

#### Konfigurationsfil som använder både `nmblookup` och anrop med ping

Samma nätverk, men här används både nmblookup och anrop med ping.

    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                #försök också med nmblookup
    FirstWait = 30                          #30 hundradels sekunder
    SecondWait = -1                         #försök bara en gång
    #SecondWait = 60                         #försök två gånger, och vänta 0,6 sekunder andra gången
    UpdatePeriod = 300                      #uppdatera efter 300 sek
    DeliverUnnamedHosts = 0                 #visa inte värddatorer utan namn
    MaxPingsAtOnce = 256                    #skicka upp till 256 ICMP-ekoförfrågningar på en gång

#### Konfigurationsfil för &reslisa;

Och nu en konfigurationsfil för &reslisa;, PingAddresses används inte av &reslisa;, inte heller BroadcastNetwork.

    PingNames = bb_mail;någon_värddator;någon_annan_värddator
    AllowedAddresses = 192.168.0.0/255.255.0.0
    SearchUsingNmblookup = 1                # använd nmblookup
    FirstWait = 30                          #30 hundradels sekunder
    SecondWait = -1                         #bara ett försök
    #SecondWait = 60                         #försök två gånger, och vänta 0,6 sekunder andra gången
    UpdatePeriod = 300                      #uppdatera efter 300 sek
    DeliverUnnamedHosts = 1                 #visa inte värddatorer utan namn
    MaxPingsAtOnce = 256                    #skicka upp till 256 ICMP-ekoförfrågningar på en gång

## Kommandoradsväljare och övrig användning

Följande kommandoradsväljare stöds:

`-v`, `--version`

- Skriver ut kortfattad versionsinformation.

`-h`, `--help`

- Ger en översikt över kommandoradsväljare

`-u`, `--unix`

- Leta först efter `$`HOME`/.lisarc`, sedan efter `/etc/lisarc`. Det här är det normala beteendet.

`-k`, `--kde1`

- Leta först efter `$`HOME`/.kde/share/config/lisarc`, sedan efter `$`KDEDIR`/share/config/lisarc`.

`-K`, `--kde2`

- Letar efter filen `lisarc` i varje katalog som returneras genom att köra ``kde-config` `--path` `config``

`-c`, `--config=``FIL`

- Läs `FIL` och ingen annan konfigurationsfil.

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

- Starta servern med det här portnumret. Om du använder det här kommer &lisa; inte att kunna samarbeta med andra &lisa;-program i nätverket. Det här alternativet är inte tillgängligt för &reslisa;

Om du skickar signalen SIGHUP till &lisa; eller &reslisa;, kommer den att läsa om sin konfigurationsfil (``killall` `-HUP lisa``).

Om du skickar signalen SIGUSR1 till &lisa; eller &reslisa;, skriver den ut en del statusinformation till standardutmatningen (``killall` `-USR1 lisa``). Du ser ingenting om terminalen där &lisa;/&reslisa; startades har avslutats.

## Tack till och licens

&lisa; och &reslisa; copyright 2000, 2001, Alexander Neundorf

Översättning Stefan Asserhäll stefan.asserhall@telia.com

Ha roligt, Alexander Neundorf neundorf@kde.org

&underFDL; &underGPL;

## Installation

&lisa; och &reslisa; behöver libstdc++ (de använder strängklassen från det), de behöver inte varken &Qt; eller &kde;.

&install.compile.documentation;

### Andra krav

Både &reslisa; och &lisa; öppnar ett så kallat direktuttag (raw socket) för att skicka och ta emot ICMP-ekoförfrågningar (anrop med ping). För att kunna göra detta, behöver de `root`-behörigheter.

&lisa; tillhandahåller en tjänst på TCP-porten 7741, och måste installeras av `root` och startas när systemet sätts igång. Det beror mycket på operativsystemet hur det här kan åstadkommas.

&reslisa; är avsett att startas av varje användare, den tillhandahåller ingenting till nätverket. Den måste installeras setuid `root`.

Om du använder `rlan` I/O-slaven från &kde; 2, kan &reslisa; startas automatiskt.

&lisa; läser filen `lisarc`, &reslisa; läser filen `reslisarc`. Om du vill kunna ställa in båda från inställningscentralen, måste du starta dem med kommandoradsväljaren `-K`.

För mer information om var de letar efter konfigurationsfiler, läs kapitlet om command-line-options.