Kapitel 2. 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.