# &lisa; käsiraamat

## Sissejuhatus

&lisa; eesmärk on pakkuda omamoodi võrgunaabrust, kuid seda ainult TCP/IP protokollile toetudes, ilma igasuguse vajaduseta Samba või mille tahes järele.

See on täiesti sõltumatu &kde;/&Qt;-st.

Töötavate masinate nimekirja pakutakse TCP pordi 7741 vahendusel.

&lisa; toetab masinate leidmist kahel viisil:

1. &lisa;le võib anda IP aadresside vahemiku, misjärel &lisa; saadab ICMP echo nõuded kõigile määratud IP aadressidele ja ootab neilt vastust.

2. &lisa;le võib anda korralduse käivitada `nmblookup` `"*"`. Käsureavahend `nmblookup` peab olema paigaldatud koos Samba paketiga. Käsk `nmblookup` `"*"` saadab ühendatud võrkudele leviteate ning kõik masinad, kus töötab SMB teenus, vastavad sellele.

## Kuidas see töötab

Konfiguratsioonifailis määratakse IP aadresside vahemik, mida &lisa; kontrollib tuvastamaks, kas nad töötavad.

Kõige lihtsamal juhul on selleks sinu enda võrguaadress/alamvõrgumask, millisel juhul &lisa; kontrollib iga võimalikku masinat sinu võrgus tuvastamaks, kas see töötab.

Masinaid kontrollitakse ICMP echo nõuetega. Et olla võimeline saatma ja vastu võtma ICMP echo nõudeid ja vastuseid, tuleb avada niinimetatud toorsokkel. Seepärast läheb vaja administraatori (`root`) õigusi. Sokkel tuleb avada kohe pärast rakenduse käivitamist ning pärast sokli edukat avamist loobutakse kohe administraatori õigustest (vaata `main.cpp` ja `strictmain.cpp`).

Kui &lisa; on seadistatud kasutama ka rakendust `nmblookup`, siis ta `popen("nmblookup \"*\"")` ja seejärel analüüsib tulemusi.

Et ICMP nõuded ja leviteated võivad põhjustada omajagu võrguliiklust, kui ühes ja samas võrgus töötab mitu sellist serverit, teevad need serverid omavahel koostööd. Enne pingimist (või `nmblookup` rakendamist) saadavad nad leviteate porti 7741.

Kui keegi leviteatele vastab, saadakse vastajalt TCP pordi 7741 vahendusel töötavate masinate täielik nimekiri ning pingimine (või `nmblookup`) jäetakse ära.

Kui keegi ei vasta, alustab leviteate saatnud masin teiste masinate pingimist (või kasutab `nmblookup`-i) ja avab seejärel sokli, mis jälgib mainitud leviteateid. Kui masin saab oma leviteatele vastuse, ei pea ta avama soklit leviteadete kuulamiseks. Seetõttu on tavaliselt vaid ühel serveril see sokkel avatud ja just see üksainus server ka tegelikult pingib (või kasutab `nmblookup`-i) teisi masinaid.

Teisisõnu - serverid on laisad ja töötavad põhimõttel ma teen midagi ainult siis, kui keegi teine seda minu eest ära ei tee.

On veel üks omadus, mis kahandab võrgukoormust.

Oletame, et &lisa; on seatud uuendama iga 10 minuti järel. Kuid sa ei kasuta serverit just väga tihti. Kui keegi ei kasuta serverit viimase uuendamisperioodi jooksul, siis server võtab ette uuenduse (kas ise või masina abil, mis seda tegelikult teeb) ning kahekordistab uuendusintervalli, &ie; järgmine uuendus leiab aset 20 minuti pärast.

Nii juhtub kuni neli korda, see tähendab, et kui keegi ei kasuta serverit kümneminutilise uuendusperioodi kestel pikka aega, suureneb uuendusperiood lõpuks 160 minuti ehk peaaegu kolme tunnini. Kui keegi siis serveri andmeid kasutab, saab ta vana nimekirja (kuni 160 minutit vana). Serverit kasutades seatakse aga uuendusintervall taas esialgseks, &ie; 10 minutile, ning uuendus algab kohe, kui viimasest uuendusest on möödas enam kui 10 minutit. See tähendab, et kui said vastuseks vana nimekirja, võid mõne hetke pärast uuesti proovida ja vastuseks peaks olema tuttuus versioon.

Sellel on otsene mõju serveritele, mis ise ei pingi (või ei kasuta nmblookup-i), sest tavaliselt tarvitab neid vaid üks kasutaja, ning suhteliselt vähene mõju serverile, mis pingib (või kasutab `nmblookup`-i), sest seda serverit kasutavad kõik teised võrgu serverid.

Nii on võimalik, et paljud masinad võrgus kasutavad antud serverit, kuid võrgukoormus on ometi tagasihoidlik. Kasutaja seisukohalt pole eriti oluline teada, kas võrgus on ka server (&ie; nimeserver või failiserver või mis iganes), millel töötab &lisa;. Ta võib alati panna &lisa; oma masinas tööle ning &lisa; tuvastab ise, kas selline on olemas ja annab sellest ka kasutajale teada.

&lisa; esimene klient on &kde; 2 IO moodul, nii et kasutaja võib anda käsu `lan://localhost` või lihtsalt `lan:/`, mis mõlemad võtavad ühendust &lisa;ga samas süsteemis.

Kui tegemist on kogu aeg töötava masinaga ja kasutaja teab, et sellel töötab ka &lisa;, võib ta oma &lisa; klienti kasutada otseselt selle serveriga (mainitud IO mooduli puhul `lan://serveri_nimi`).

Kui sa ei soovi, et &lisa; osaleks leviteadetes, vaid teeks alati ise pingi, pane ta kasutama mingit muud porti käsureavõtmega `--port` või `-p`. See ei ole siiski soovitatav!

Kui saata &lisa;le `SIGHUP`, loeb see oma konfiguratsioonifaili uuesti. Kui saata &lisa;le `SIGUSR1`, avaldab ta standardväljundis oma olekuinfo.

Üle sokli edastatavate andmete vorming on lihtne: `<IP aadress kümnendkujul võrgubaidijärjekorras><üks tühik 0x20><masina täisnimi><lõpetav '\0'><reavahetus '\n'>` ja viimane rida `0 succeeded<'\n'>`

Näide:

    17302538 mingi_masin.misiganes.ee
    18285834 linux.misiganes.ee
    17827082 nimeserver.misiganes.ee
    0 succeeded

Nii on see hõlpsasti analüüsitav.

Kui sinu võrgus valitsevad väga ranged turvareeglid, võib osa inimesi pingi pidada potentsiaalseks rünnakuks. Kui sellega tekib probleeme, proovi kasutada piirangutega versiooni &reslisa;.

## &reslisa;

Kui sinu võrgus valitsevad väga ranged turvareeglid või sa ei soovi avada veel mõnda porti või mis iganes põhjus ka ei oleks, on võimalik kasutada &reslisa;.

&reslisa; abil ei saa pingida kogu võrku ega aadressidevahemikku, praegu on võimalik anda &reslisa;le kuni 64 masinat nime kaupa konfiguratsioonifailis. Neid siis pingitaksegi. Siiski saab kasutada ka `nmblookup`-i.

&reslisa; edastab infot ainult UNIX domeeni sokli kaudu, &ie; mitte üle võrgu. Sokli nimi on `/tmp/resLisa-SinuKasutajanimi`, nii et &reslisa; on võimalik rahulikult lasta tööle panna ühel ja samal masinal enam kui ühe kasutaja poolt.

Et see ei tohi ometi tekitada turvariski, on mõttekas &reslisa; paigaldada setuid `root`. Administraatori (`root`) privileegidest loobutakse kohe pärast käivitamist (vaata `strictmain.cpp`), neid läheb vaja ainult toorsokli loomiseks, et saata ICMP echo nõudeid.

Ka leviteateid ei saadeta ega võeta vastu. Ka siin on esimene klient &kde; 2 IO moodul (näiteks `rlan:/` &konqueror;is).

## Seadistustefail

Nüüd näide seadistusfailist:

    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                #püütakse kasutada ka nmblookup-i
    FirstWait = 30                          #30 sajandiksekundit
    SecondWait = -1                         #ainult üks kord
    #SecondWait = 60                         #proovi kaks korda ning teine kord oota 0,6 sekundit
    UpdatePeriod = 300                      #uuendus 300 sekundi järel
    DeliverUnnamedHosts = 0                 #ei avaldata masinaid ilma nimeta
    MaxPingsAtOnce = 256                    #korraga saadetakse kuni 256 ICMP echo nõuet

### `PingAddresses`

See on ilmselt kõige tähtsam kirje.

Siin määratakse, milliseid aadresse pingitakse. Määrata saab mitu vahemikku, mida eraldavad semikoolonid.

Aadresse saab määrata neljal viisil:

võrguaadress/võrgumask

- 192.168.100.0/255.255.255.0, &ie; IP aadress ja omistatud võrgumask.

  See ei pea olema sinu masina võrguaadress ja võrgumask. Kui näiteks sinu enda aadress on 10.0.0.0/255.0.0.0, võid määrata ka ka 10.1.2.0/255.255.255.0, kui tunned huvi ainult nende aadresside vastu. IP aadressi ja võrgumaski kombinatsiooni peab eraldama kaldkriips / ning aadress ei pea olema reaalne võrguaadress, see võib olla ka soovitud võrgu masina aadress, &ie; 10.12.34.67/255.0.0.0 on sama, mis 10.0.0.0/255.0.0.0.

IP aadresside vahemik

- Näide: 192.168.100.10-192.168.199.19

  IP aadress, millest pingimine algab, ja IP, millel pingimine lõpeb.

  Aadresse peab eraldama märk -.

  Antud näites on tulemuseks 199-100+1=100, 100*256=25 600, 25 600+(19-10+1)=25 590 aadressi

IP aadress iga nelja numbri vahemikuna

- IP aadressi väljendatakse selle nelja numbriga ning igale neist võib määrata omaette vahemiku: 192-192.169-171.100-199.0-9

  Antud näites pingitakse kõiki IP aadresse esimese numbriga 192, teise numbriga 168 kuni 168, kolmanda numbriga 100 kuni 199 ja viimase numbriga 0 kuni 9. See teeb kokku 1*1*100*10=1000 aadressi.

  Sellel on tõenäoliselt mõtet ainult haruharva. Siin tuleb määrata kõigi nelja numbri vahemik, alati eraldajaks -.

Üksikud IP aadressid või masinanimed

- Selle masina IP aadress või masinanimi, mille vastu sa erilist huvi tunned.

Selle kirje võib aga ka täiesti tühjaks jätta.

### `PingNames`

Siin saab täiendavalt nimepidi määrata pingitavaid masinaid. Nimesid peavad eraldama semikoolonid.

Selle kirje võib aga ka täiesti tühjaks jätta.

### `AllowedAddresses`

See on samuti väga tähtis. &lisa; pingib ainult aadresse, tunnustab kliente ja vastab leviteadetele aadressidelt, mis on antud sellele reale kirjutatud aadressidega. Lisada võib kuni 32 võrguaadressi/võrgumaski või üksikaadressi. Eraldajaks on semikoolon ja kindlasti ei tohi aadresside vahele jätta tühikut!

Näide: 192.168.0.0/255.255.0.0;192.169.0.0

Kogu võrk ja üks üksikaadress sobivad. Püüa alati teha see nii rangeks kui võimalik, tavaliselt on mõistlik valik sinu võrguaadress/võrgumask.

### `BroadcastNetwork`

Selles kirjes on vaid üks võrguaadress/võrgumask. Sellele saadetakse võrgu leviteated. Tavaliselt peaks see olema sinu võrguaadress/võrgumask, näiteks 192.168.0.0/255.255.0.0

### `SearchUsingNmblookup`

Siin saab anda parameetri `0` või `1`. Parameeter `1` tähendab, et &lisa; käivitab `nmblookup` `"*"` ja analüüsib käsu väljundit. See tekitab vähem võrguliiklust kui pingimine, kuid saadakse vaid masinad, millel töötab SMB teenus (&Windows; masinad või masinad, millel töötab Samba).

Selle lubamisel ning ka pingitavate IP aadresside määramisel rakendatakse kõigepealt `nmblookup` ja alles seejärel hakatakse pingima. Siis pingitakse ainult aadresse, mida ei ole juba tuvastatud `nmblookup`-iga. See kahandab veidi võrgukoormust.

### `FirstWait`

Kui &lisa; pingib, &ie; saadab ICMP echo nõudeid, saadetakse hulk nõudeid korraga ja jäädakse seejärel vastust ootama siin määratud sajandiksekundiks. Tavaliselt on mõistlik valida 5 ja 50 sajandiksekundi vahel, maksimum on 99 (ehk 0,99 sekundit, mis on juba väga pikk aeg). Püüa hoida see väärtus võimalikult väike, kuid samas piisavalt suur, et leitaks kõik töötavad masinad.

### `SecondWait`

Kui &lisa; on echo nõuded esimest korda välja saatnud, võib siiski juhtuda, et mõnda masinat ei leitud. Tulemuse parandamiseks võib &lisa; pingida ka teist korda. Sel korral pingitakse ainult neid masinaid, millelt vastust ei saadud. Kui tavaliselt annab juba esimene ping hea tulemuse, võib teise pingimise keelata, määrates SecondWait väärtuseks `-1`.

Üldiselt on mõtet määrata lubamise korral selle väärtus veidi pikemaks kui `FirstWait` väärtus, sest masinad, mida esimesel korral ei leitud, on tõenäoliselt aeglasemad või asuvad päris kaugel, nii et nende vastus võib võtta mõni millisekund rohkem aega. Tavaliselt on mõistlik väärtus 5 kuni 50 või ka -1, mis teise pingi keelab. Maksimum on 99 (ehk 0,99 sekundit, mis on väga pikk aeg).

### `UpdatePeriod`

See on ajavahemik, mille järel &lisa; uuenduse ette võtab. Selle aja möödudes pingib &lisa; uuesti või rakendab `nmblookup`-i või hangib masinate nimekirja &lisa; serverilt, mis tegelikult pingib.

Kehtivad väärtused on 30 ja 1800 sekundi (pool tundi) vahel. Kui võrk on suur, ära määra intervalli liiga väikeseks (muidu kasvab võrgu koormus). Üsna mõistlikud väärtused jäävad 300 ja 900 sekundi ehk 5 ja 15 minuti vahele.

Pea meeles, et kui keegi serverit ei kasuta, suureneb intervall kahekordseks ja nii kuni neli korda järjest, mis tähendab, et intervall võib muutuda kuni 16 korda pikemaks siinmääratust, kuid see omandab kohe oma esialgse väärtuse, kui keegi serverit kasutab.

### `DeliverUnnamedHosts`

Kui saadakse vastus echo nõudele IP aadressilt, mille korral &lisa; ei suuda nime määrata, edastatakse see ainult üle pordi, kui siin on väärtuseks määratud 1.

Ma ei ole päris kindel, kas see on väga kasulik võimalus, kuid võib ette tulla mingeid infrastruktuuri seadmeid võrgus, millele ei ole omistatud nime ja mida seetõttu ei avaldata. Määra väärtuseks 0, kui soovid neid varjatuna hoida ;-) Kui sa ei ole kindel, määra väärtuseks 0.

### MaxPingsAtOnce

Pingides ehk echo nõudeid saates saadab &lisa; neid korraga teele terve hulga ja jääb siis vastuseid ootama. Vaikimisi saadetakse korraga 256 pingi ning enamasti ei ole seda väärtust vaja muuta. Kui see on palju suurem, võib echo nõuete vastuste vastuvõtmise sisemine puhver jääda väikeseks, kui see on liiga väike, on uuendamine aeglasem.

### Veel kolm näidisfaili

#### FIXME

Oled osa väikesest 24-bitise võrgumaskiga võrgust, &ie; võrgust kuni 256 masinaga:

    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-i ei kasutata
    FirstWait = 20                                   #20 sajandiksekundit
    SecondWait = 30                                  #30 sajandiksekundit teisel katsel
    UpdatePeriod = 300                               #uuendus iga 300 sekundi järel
    DeliverUnnamedHosts = 0                          #nimeta masinaid ei avaldata

#### Konfiguratsioonifail masinatele, kus töötab ainult SMB

Tunned huvi ainult masinate vastu, kus töötab SMB teenus ning võrgus ei ole ruutereid:

    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                #kasutatakse nmblookup-i
    UpdatePeriod = 300                      #uuendamine iga 300 sekundi järel
    DeliverUnnamedHosts = 0                 #nimeta masinaid ei avaldata

#### Konfiguratsioonifail nii `nmblookup`-i kui pingimise kasutamisel

Sama võrk, kuid kasutusel on nii nmblookup kui pingimine.

    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                #kasutatakse ka nmblookup-i
    FirstWait = 30                          #30 sajandiksekundit
    SecondWait = -1                         #ainult üks katse
    #SecondWait = 60                         #kaks katset, teisel katsel oodatakse 0,6 sekundit
    UpdatePeriod = 300                      #uuendus iga 300 sekundi järel
    DeliverUnnamedHosts = 0                 #nimeta masinaid ei avaldata
    MaxPingsAtOnce = 256                    #korraga saadetakse kuni 256 ICMP echo nõuet

#### &reslisa; seadistusfail

Nüüd siis &reslisa; konfiguratsioonifail. &reslisa; puhul ei ole kasutusel PingAddresses ega ka BroadcastNetwork.

    PingNames = bb_mail;mingi_masin;mingi_muu_masin
    AllowedAddresses = 192.168.0.0/255.255.0.0
    SearchUsingNmblookup = 1                # kasutatakse nmblookup-i
    FirstWait = 30                          #30 sajandiksekundit
    SecondWait = -1                         #ainult üks katse
    #SecondWait = 60                         #kaks katset ja teisel katsel oodatakse 0,6 sekundit
    UpdatePeriod = 300                      #uuendatakse iga 300 sekundi järel
    DeliverUnnamedHosts = 1                 #avaldatakse ka nimeta masinad
    MaxPingsAtOnce = 256                    #korraga saadetakse kuni 256 ICMP echo nõuet

## Käsurea võtmed ja muu kasutamisega seonduv

Toetatud on järgmised käsurea võtmed:

`-v`, `--version`

- Näitab versiooni lühiinfot.

`-h`, `--help`

- Näitab ülevaadet käsurea võtmete kohta

`-u`, `--unix`

- Otsib esmalt `$`HOME`/.lisarc`, seejärel `/etc/lisarc`. See on vaikekäitumine.

`-k`, `--kde1`

- Otsib esmalt `$`HOME`/.kde/share/config/lisarc`, seejärel `$`KDEDIR`/share/config/lisarc`.

`-K`, `--kde2`

- Otsib `lisarc` kõigis kataloogides, mis tagastati ``kde-config` `--path` `config`` rakendamisel

`-c`, `--config=``FAIL`

- Loeb ainult `FAIL`i, mitte muid konfiguratsioonifaile.

`-p`, `--port` `PORDINUMBER`

- Käivtab serveri antud numbriga pordis. Selle kasutamisel ei pruugi &lisa; olla valmis koostööks teiste võrgus töötavate &lisa;dega. &reslisa; korral ei ole see võti kasutatav.

Kui saadad &lisa;le või &reslisa;le hangup-signaali, loeb see uuesti oma konfiguratsioonifaili (``killall` `-HUP lisa``).

Kui saadad &lisa;le või &reslisa;le User1-signaali, näitab see standardväljundis olekuinfot (``killall` `USR1 lisa``). Küll aga ei ole midagi näha, kui konsool, millelt &lisa;/&reslisa; käivitati, on töö lõpetanud.

## Autorid ja litsents

&lisa; ja&reslisa; autoriõigus 2000, 2001: Alexander Neundorf

Tõlge eesti keelde: Marek Laane bald@online.ee

Tundke rõõmu, Alexander Neundorf neundorf@kde.org

&underFDL; &underGPL;

## Paigaldamine

&lisa; ja &reslisa; vajavad libstdc++ (sellest kasutatakse ainult string-klassi), kuid ei vaja ei &Qt; ega &kde;.

&install.compile.documentation;

### Muud nõuded

Nii &reslisa; kui &lisa; avavad niinimetatud toorsokli ICMP echo nõuete (pingi) saatmiseks ja vastuvõtmiseks. Avamiseks vajavad nad administraatori (`root`) privileege.

&lisa; pakub teenust TCP pordil 7441 ja peab olema paigaldatud administraatori (`root`) poolt ning käivitatud koos süsteemi käivitamisega. Kuidas see täpselt välja näeb, sõltub suuresti sellest, milline on sinu operatsioonisüsteem.

&reslisa; on mõeldud käivitatama kasutajate kaupa, see ei paku midagi võrgule. See peab olema paigaldatud setuid `root`.

Kui kasutad &kde; 2 IO moodulit `rlan`, käivitatakse &reslisa; automaatselt.

&lisa; loeb faili `lisarc`, &reslisa; faili `reslisarc`. Kui soovid neid mõlemat seadistada &kcontrol;es, tuleb nad käivitada käsureavõtmega `-K`.

Täpsemat infot selle kohta, kust nad oma konfiguratsioonifaile loevad, annab command-line-options.