# &lisa;-håndbogen

## Indledning

&lisa; er beregnet til at give en slags netværksomgivelse, men afhænger kun af TCP/IP-protokollen, ikke SMB eller noget andet.

Den er fuldstændig uafhængig af &kde;/&Qt;.

Listen over værtsmaskiner som kører findes via TCP-porten 7741.

&lisa; understøtter to måder at finde værtsmaskiner:

1. Du angiver et interval med IP-adresser til &lisa;, derefter sender &lisa; en ICMP-ekkoforespørgsel til alle angivne IP-adresser, og venter på svar.

2. Du kan fortælle &lisa; at den skal køre `nmblookup` `"*"`. Kommandolinjeværktøjet fra Samba-pakken `nmblookup` skal være installeret. `nmblookup` `"*"` sender en broadcast til de tilsluttede netværk, og alle værtsmaskiner som kører en SMB-tjeneste svarer på denne broadcast.

## Hvordan det virker

I indstillingsfilen angiver du et interval af IP-adresser som &lisa; skal kontrollere for at se om de kører.

I det enkleste tilfælde kan dette være din IP-adresse/undernetsmaske. I såfald kontrollerer &lisa; hver mulig værtsmaskine på netværket for at se om den kører.

Værtsmaskinerne undersøges med ICMP-ekkoforespørgsler. For at kunne sende og modtage ICMP-ekkoforespørgsler og svare skal programmet åbne en såkaldt rå sokkel (raw socket). Derfor behøver det `root`-rettigheder. Denne sokkel åbnes lige efter programmet er startet, og efter at have åbnet soklen med heldigt resultat, så slippes root-rettighederne med det samme (se `main.cpp` og `strictmain.cpp`).

Hvis du indstiller &lisa; så den også bruger `nmblookup`, kommer den til at køre `popen("nmblookup \"*\"")` og siden tolke resultatet.

Eftersom ICMP-forespørgsler og broadcast kan forårsage en del netværkstrafik hvis der findes mere end en sådan server som kører i et netværk, samarbejder serverne med hinanden. Inden de begynder at lave kald med ping (eller `nmblookup`), sender de en broadcast på port 7741.

Hvis nogen svarer på denne broadcast, henter de den fuldstændige liste på værtsmaskiner som er startede via TCP-porten 7741 fra denne værtsmaskine og begynder ikke at kalde med ping (eller `nmblookup`).

Hvis ingen svarer, så begynder værtsmaskinen som sendte broadcasten at kalde værtsmaskiner med ping (eller `nmblookup`) og åbner derefter en sokkel som lytter efter de ovennævnte broadcast. Hvis værtsmaskinen modtog et svar på broadcasten, har den ikke soklen som lytter efter broadcaster åben. Så almindeligvis har præcis en af serverne denne sokkel åben og kun denne kommer virkelig til at kalde med ping (eller `nmblookup`) til værtsmaskinerne.

Med andre ord så er serverne dovne, de arbejder ifølge Jeg gør kun noget hvis ingen anden kan gøre det for mig.

Der er en anden funktion som reducerer netværksbelastningen.

Lad os antage at du indstillede &lisa; til at opdatere hver 10. minut. Nu kommer du ikke til serveren særlig ofte. Hvis ingen kommer til serveren i den sidste opdateringsperiode, kommer serveren til at opdatere (enten selv, eller fra den som virkelig gør jobbet) og derefter fordoble opdateringsperioden, dvs. næste opdatering vil ske om 20 minutter.

Dette sker fire gange, så hvis ingen kommer til serveren med en opdateringsperiode på 10 minutter i lang tid, så øges dens opdateringsperiode til 160 minutter, næsten tre timer. Hvis nogen siden kommer efter data fra serveren, får de en gammel liste (op til 160 minutter gammel). Når dette sker nulstiller serveren sin opdateringsperiode til den oprindelige værdi, dvs. 10 minutter, og starter umiddelbart en opdatering hvis den seneste opdatering gjordes for mere end 10 minutter siden. Dette betyder at hvis du får en meget gammel liste, kan forsøge igen om nogle sekunder, så vil du få en aktuel version.

Dette vil have en hurtig effekt for serverne, som ikke kalder med ping (eller nmblookup) selv, eftersom kun en eneste oftest kommer til dem, og det har mindre effekt på serveren som laver kaldet (eller `nmblookup`), eftersom denne server kan kommes til fra alle andre servere i netværket.

På denne måde er det muligt at mange værtsmaskiner i et netværk kører denne server, men den totale belastning forbliver lav. For brugeren er det ikke nødvendigt at vide om der findes en server (dvs en navneserver eller filserver eller noget andet) i netværket som også kører &lisa;. Brugeren kan altid køre &lisa; lokalt og &lisa; opdager om der er en, transparent for brugeren.

Den første klient for &lisa; er en I/O-slave for &kde; 2, så brugeren kan indtaste enten `lan://localhost/` eller `lan:/` hvilket vil kontakte &lisa; på det egne systemet.

Hvis der findes en maskine som kører hele tiden og brugeren véd at denne maskine også kører &lisa;, kan &lisa;-klienten bruges direkte med denne server (altså med den ovennævnte I/O-slave `lan://server_navnet/`).

Hvis du ikke ønsker at din &lisa; skal deltage i broadcasten, men altid gøre broadcasterne selv, så brug en anden port med kommandolinjeflaget `--port` eller `-p`. Dette anbefales ikke!

Hvis du sender `SIGHUP` til &lisa;, læser den sin indstillingsfil igen. Hvis du sender `SIGUSR1` til &lisa;, udskriver den en del statusinformation på standardudskriften.

Data som sendes via soklen har et enkelt format: `<decimal IP-adresse i netværkets byte-rækkefølge><et blankt tegn 0x20><fuldstændigt navn på værtsmaskinen><et afsluttende '\0'><nylinje '\n'<` og den sidste linjen `0 succeeded<'\n'>`

For eksempel,

    17302538 en_værtsmaskine.etsted.dk
    18285834 linux.etsted.dk
    17827082 navneserver.etsted.dk
    0 succeeded

Dette bør gøre det let at tolke.

Hvis der er meget strenge sikkerhedsregler i dit netværk, kan nogen opfatte et kald med ping som et potentielt angreb. Hvis du har problemer med dette, så prøv med den begrænsede udgave, &reslisa;.

## &reslisa;

Hvis du har meget strenge sikkerhedsregler i dit netværk, eller hvis du ikke vil have en anden port åben eller noget andet, kan du bruge &reslisa;.

Med &reslisa; kan du ikke kalde hele netværk og adresseintervaller med ping, men du kan give &reslisa; for nærværende op til 64 værtsmaskiner med navn i dens indstillingsfil. Disse vil blive kaldet. Du kan stadigvæk bruge `nmblookup`.

&reslisa; sender også kun informationen via en sokkel i Unix-domænet, dvs ikke via netværket. Navnet på soklen er `/tmp/resLisa-DitIndlogningsnavn`, så &reslisa; kan køres sikkert af flere brugere på samme maskine.

Eftersom den ikke bør kunne være en sikkerhedsrisiko af nogen slags er det sikkert at installere &reslisa; setuid `root`. `root`-rettighederne slippes direkte efter opstart (se `strictmain.cpp`), de behøves kun for at oprette en direkte sokkel til at sende ICMP-ekkoforespørgsler.

Den sender eller tager heller ikke imod broadcaster. Den første klient for den er en I/O-slave for &kde; 2 (for eksempel `rlan://localhost/` i &konqueror;).

## Indstillingsfilen

Her er et eksempel på en indstillingsfil:

    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                #forsøg også med nmblookup
    FirstWait = 30                          #30 hundrededels sekunder
    SecondWait = -1                         #kun et forsøg
    #SecondWait = 60                         #forsøg to gange, og vent 0,6 sekunder anden gang
    UpdatePeriod = 300                      #opdatér efter 300 sek
    DeliverUnnamedHosts = 0                 #vis ikke værtsmaskiner uden navn
    MaxPingsAtOnce = 256                    #send op til 256 ICMP-ekkoforespørgsler på én gang

### `PingAddresses`

Dette er formodentlig den vigtigste indgang.

Her angiver du hvilke adresser som skal kaldes med ping. Du kan angive flere intervaller, som afgrænses med semikolon.

Der findes fire mulige måder at definere adresser:

IP-adresse/netværksmaske

- 192.168.100.0/255.255.255.0, dvs. en IP-adresse og den tildelte netværksmaske.

  Dette behøver ikke være IP-adressen og netmasken på din maskine. Hvis du for eksempel har 10.0.0.0/255.0.0.0 som din egen adresse, skulle du kunne angive 10.1.2.0/255.255.255.0 hvis du kun er interesseret i disse adresser. Den kombinerede IP-adresse og netværksmasken skal afgrænses med en skråstreg / og adressen behøver ikke være en rigtig netværksadresse, den kan også være en værtsmaskineadresse i det ønskede netværk, dvs.10.12.34.67/255.0.0.0 er det samme som 10.0.0.0/255.0.0.0 .

et interval med IP-adresser

- For eksempel: 192.168.100.10-192.168.199.19

  En IP-adresse hvor kald med ping begynder og en anden IP-adresse hvor kald slutter.

  Begge adresser skal være opdelte med et -.

  For dette eksempel ville det resultere i 199-100+1 = 100, 100*256 = 25 600, 25 600+(19-10+1) = 25 590 adresser

En IP-adresse, representeret ved interval for hver af de fire decimaltal.

- En IP-adresse kan repræsenteres ved sine fire decimaltal, og du kan angive interval for hvert af disse fire tal: 192-192.169-171.100-199.0-9

  I dette eksempel kommer alle IP-adresser med det første tal 192, det andet tal fra 168 til 168, det tredje tal fra 100 op til 199 og det sidste tal fra 0 op til 9 til at blive kaldt med ping. Dette skulle give 1*1*100*10 = 1 000 adresser.

  Dette er formodentlig kun anvendeligt i et fåtal af tilfælde. Her skal du angive interval for hvert fjerde tal, altid afgrænsede med -.

En enkel IP-adresse eller et værtsmaskinenavn

- IP-adressen eller værtsmaskinenavnet for en maskine som du er særligt interesseret i.

Det er også gyldigt at lade denne indgang være tom.

### `PingNames`

Her kan du desuden angive navn for værtsmaskiner som skal kaldes med ping. Navnene skal separeres med semikolon.

Det er også gyldigt at lade denne indgang være tom.

### `AllowedAddresses`

Dette er også meget vigtigt. &lisa; kommer kun til at kalde adresser med ping, acceptere klienter og svare på broadcaster fra adresser som dækkes af adresserne som angives på denne linje. Du kan tilføje op til 32 IP-adresser/netmasker eller enkelte adresser. Adskil dem med semikolon, og anvend ingen mellemrum mellem adresserne!

For eksempel, 192.168.0.0/255.255.0.0;192.169.0.0

Et helt netværk eller en enkelt adresse er gyldig. Gør altid dette så begrænset som muligt, oftest er din IP-adresse/delnetmaske et godt valg.

### `BroadcastNetwork`

Denne indgang indeholder præcis en IP-adresse/delnetmask. Broadcaster sendes til denne adresse. Sædvanligvis skal dette være din egen IP-adresse/delnetmaske, for eksempel 192.168.0.0/255.255.0.0

### `SearchUsingNmblookup`

Her kan du angive `0` eller `1`. `1` betyder at &lisa; kører `nmblookup` `"*"` og tolker udskriften fra denne kommando. Dette giver mindre netværkstrafik end kald med ping, men du får kun rede på værtsmaskiner som har en SMB-tjeneste igang (&Windows;-maskiner eller maskiner som kører Samba).

Hvis du aktiverer dette, og desuden angiver IP-adresser for kald med ping, så køres `nmblookup` først og derefter starter kaldet. Så kaldes kun adresser som ikke allerede afledtes fra `nmblookup`. Dette burde mindske netværksbelastningen en lille smule.

### `FirstWait`

Hvis &lisa; kalder med ping, dvs hvis den sender ICMP-ekkoforespørgsler, sender den et antal forespørgsler på en gang, og ventar siden så mange hundrededels sekunder som du angiver her. Oftest er værdier fra 5 til 50 gode, den maksimale værdi er 99 (som giver 0,99 sekunder, en meget lang tid). Forsøg at sætte denne værdi så lavt som muligt mens alle værtsmaskiner som er startede stadigvæk findes.

### `SecondWait`

Efter &lisa; har sendt ekkoforespørgsel første gang, kan det være muligt at visse værtsmaskiner ikke blev fundet. For at forbedre resultatet, kan &lisa; kalde en gang til. Denne gang kaldes kun værtsmaskiner som den ikke fik noget svar fra. Hvis du får et godt resultat med kun at kalde en gang, kan du lukke af for den anden gang ved at angive `-1` for SecondWait.

Ellers kan det være en god idé at gøre denne værdi noget større end værdien for `FirstWait`, eftersom de værtsmaskiner som ikke blev fundet ved det første forsøg formodentlig er langsommere eller længere væk så at de tager nogle millisekunder længere at svare. Oftest er værdier fra 5 til 50 gode, eller -1 for at lukke for den anden afsøgning. Den maksimale værdi er 99 (som giver 0,99 sekunder, en meget lang tid).

### `UpdatePeriod`

Dette er intervallet som &lisa; venter inden en opdatering. Efter den her tiden gør &lisa; et kald med ping eller `nmblookup` eller henter listen med værtsmaskiner fra &lisa;-serveren som virkelig udfører kaldet.

Gyldige værdier er mellem 30 sekunder og 1800 sekunder (en halv time). Hvis du har et stort netværk, gør så ikke intervallet for lille (for at holde netværksbelastningen lav). Værdier fra 300 til 900 sekunder (5 til 15 minutter) bør være en god idé.

Husk at opdateringsperioden fordobles hvis ingen kommer til serveren, op til fire gange, så intervallet bliver 16 gange den værdi som angives her og nulstilles til værdien som angives her hvis nogen kommer til serveren.

### `DeliverUnnamedHosts`

Hvis et svar på en ekkoforespørgsel modtages fra en IP-adresse hvor &lisa; ikke kan afgøre navnet, sendes den kun via porten hvis du indstiller dette til 1.

Jeg er ikke sikker på at dette er en anvendelig funktion, men måske findes der nogle infrastrukturenheder i netværket som ikke har navne tilldelt, så at de ikke behøver at publiceres. Vælg 0 her hvis du vil lade dem være hemmelige. Vælg 0 hvis du er usikker.

### MaxPingsAtOnce

Når &lisa; sender kald med ping (ekkoforespørgsler), sender den et antal på en gang og venter derefter på svaret. Normalt sendes 256 kald på en gang, og du behøver oftest ikke ændre på denne værdi. Hvis du gør den meget større, kan de interne buffere for modtagelse af svarene på ekkoforespørgsler blive for små. Hvis du gør det for lille bliver opdatering langsommere.

### Yderligere tre eksempler på filer

#### AT GØRE

Du er medlem i et lille netværk med 24-bits netværksmaske, dvs. op til 256 værtsmaskiner.

    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                         #anvend ikke nmblookup
    FirstWait = 20                                   #20 hundrededels sekunder
    SecondWait = 30                                  #30 hundrededels sekunder ved andet forsøg
    UpdatePeriod = 300                               #opdatér efter 300 sek
    DeliverUnnamedHosts = 0                          #vis ikke værtsmaskiner uden navn

#### Indstillingsfil for værtsmaskiner som kun kører SMB

Du er kun interesseret i værtsmaskiner som kører SMB-tjenesten og du har ingen routere i netværket.

    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                #anvend nmblookup
    UpdatePeriod = 300                      #opdatér efter 300 sek
    DeliverUnnamedHosts = 0                 #vis ikke værtsmaskiner uden navn

#### Indstillingsfil som anvender både `nmblookup` og kald med ping

Samme netværk, men her bruges både nmblookup og kald 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                #forsøg også med nmblookup
    FirstWait = 30                          #30 hundrededels sekunder
    SecondWait = -1                         #forsøg kun en gang
    #SecondWait = 60                         #forsøg to gange, og vent 0,6 sekunder anden gang
    UpdatePeriod = 300                      #opdatér efter 300 sek
    DeliverUnnamedHosts = 0                 #vis ikke værtsmaskiner uden navn
    MaxPingsAtOnce = 256                    #send op til 256 ICMP-ekkoforespørgsler på en gang

#### Indstillingsfil for &reslisa;

Og nu en indstillingsfil for &reslisa;, PingAddresses bruges ikke af &reslisa;, ikke heller BroadcastNetwork.

    PingNames = bb_mail;en_værtsmaskine;en_anden_værtsmaskine
    AllowedAddresses = 192.168.0.0/255.255.0.0
    SearchUsingNmblookup = 1                # anvend nmblookup
    FirstWait = 30                          #30 hundrededels sekunder
    SecondWait = -1                         #kun et forsøg
    #SecondWait = 60                         #forsøg to gange, og vent 0,6 sekunder anden gang
    UpdatePeriod = 300                      #opdatér efter 300 sek
    DeliverUnnamedHosts = 1                 #vis ikke værtsmaskiner uden navn
    MaxPingsAtOnce = 256                    #send op til 256 ICMP-ekkoforespørgsler på én gang

## Kommandolinjeflag og øvrig brug

Følgende kommandolinjeflag understøttes:

`-v`, `--version`

- Udskriver kortfattet versionsinformation.

`-h`, `--help`

- Giver en oversigt over kommandolinjeflag

`-u`, `--unix`

- Led først efter `$`HOME`/.lisarc`, derefter efter `/etc/lisarc`. Dette er den normale opførsel.

`-k`, `--kde1`

- Led først efter `$`HOME`/.kde/share/config/lisarc`, derefter efter `$`KDEDIR`/share/config/lisarc`.

`-K`, `--kde2`

- Leder efter filen `lisarc` i hver mappe som returneres ved at køre ``kde-config` `--path` `config``

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

- Læs `FIL` og ingen anden indstillingsfil.

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

- Start serveren med dette portnummer. Hvis du bruger dette kommer &lisa; ikke til at kunne samarbejde med andre &lisa;-programmer på netværket. Dette er ikke tilgængeligt for &reslisa;

Hvis du sender signalet SIGHUP til &lisa; eller &reslisa;, kommer den til at læse sin indstillingsfil igen (``killall` `-HUP lisa``).

Hvis du sender signalet SIGUSR1 til &lisa; eller &reslisa;, udskriver den en del statusinformation til standardudskriften (``killall` `-USR1 lisa``). Du ser ingenting hvis terminalen hvor &lisa;/&reslisa; startedes er afsluttet.

## Medvirkende og licens

&lisa; og &reslisa; ophavsret 2000, 2001, Alexander Neundorf

&erik.kjaer.pedersen.credit;

Hav det godt, Alexander Neundorf neundorf@kde.org

&underFDL; &underGPL;

## Installation

&lisa; og &reslisa; behøver libstdc++ (de bruger strengklassen derfra), de behøver ikke &Qt; eller &kde;.

&install.compile.documentation;

### Andre krav

Både &reslisa; og &lisa; åbner en såkaldt rå sokkel (raw socket) for at sende og modtage ICMP-ekkoforespørgsler (kald med ping). For at kunne gøre dette, behøver de `root`-rettigheder.

&lisa; sørger for en tjeneste på TCP-porten 7741, og skal installeres af `root` og startes når systemet sættes i gang. Det afhænger meget af operativsystemet hvordan dette kan opnås.

&reslisa; er beregnet til at startes pr brugere, den sørger ikke for noget til netværket. Den skal installeres setuid `root`.

Hvis du bruger `rlan` I/O-slaven fra &kde; 2, kan &reslisa; startes automatisk.

&lisa; læser filen `lisarc`, &reslisa; læser filen `reslisarc`. Hvis du vil kunne indstille begge fra kontrolcentret, skal du starte dem med kommandolinjeflaget `-K`.

For mere information om hvor de leder efter indstillingsfiler, læs kapitlet om command-line-options.