# Il manuale di &lisa;

Alexander Neundorf

    neundorf@kde.org

Luciano Montanaro

    mikelima@virgilio.it

Traduzione del documento
2001 Alexander Neundorf
2001-07-07
0.01.00

&lisa; è un programma progettato per fornire una specie di vicinato di rete usando solo la pila di protocolli TCP/IP, non è necessario SMB o altro.

Questo manuale copre sia il LAN Information Server (&lisa;) che il Restricted LAN Information Server (&reslisa;)

KDE kdenetwork LAN rete vicinato di rete

## Intoduzione

&lisa; è un programma progettato per fornire una specie di vicinato di rete usando solo la pila di protocolli TCP/IP, non SMB o altro.

È completamente indipendente da &kde;/&Qt;

L'elenco degli host attivi è fornito attraverso la porta TCP 7741.

&lisa; è dotata di due metodi di ricerca degli host:

1. Si può firnire a &lisa; una sequenza di indirizzi IP, in questo caso &lisa; invierà richieste di eco ICMP a tutti gli indirizzi IP, ed aspetterà le risposte.

2. Si può dire a &lisa; di eseguire `nmblookup` `"*"`. Lo strumento da linea di comando `nmblookup` del pacchetto Samba deve essere installato. `nmblookup` `"*"` invia una richiesta broadcast alle reti a cui siamo collegati, e tutti gli host dotati di servizi SMB risponderanno a questa trasmissione.

## Come funziona

Nel file di configurazione si fornisce un elenco di indirizzi IP che &lisa; deve controllare per vedere se sono attivi.

Nel caso più semplice questo potrebbe essere l'indirizzo di rete/ maschera di sottorete della stazione di lavoro. In questo caso, &lisa; controllerebbe tutti gli host della rete per vedere se sta girando.

Gli host sono controllati usando richieste di eco ICMP. Per poter inviare e ricevere le richieste di eco ICMP e le risposte, il programma deve aprire un cosiddetto socket raw. Quindi ha bisogno dei privilegi di root. Questo socket è aperto all'inizio dell'esecuzione del programma, e subito dopo l'apertura del socket i privilegi di root sono immediatamente lasciati cadere. (vedi `main.cpp` e `strictmain.cpp`).

Se &lisa; è configurato per usare `nmblookup`, eseguirà `popen("nmblookup \"*\"")` e ne valuteràil risultato.

Dal momento che le richieste ICMP e le trasmissioni broadcast possono congestionare la rete se cè più di un server di questo tipo su una rete, i server cooperano tra di loro. Prima di iniziare i ping (o `nmblookup`), inviano una richiesta broadcast sulla porta 7741.

Se qualcuno risponde alla richiesta broadcast, ottengono la lista completa degli host attivi attraverso la porta TCP 7741 di chi ha risposto, e non eseguono alcun ping (o onym > 7741 di chi ha risposto, e non eseguono alcun ping (o `nmblookup`).

Se nessuno risponde, l'host che ha inviato la richiesta broadcast inizerà a fare ping (o `nmblookup`) sugli host e poi apre un socket in ascolto per la richiesta broadcast menzionata. Se l'host aveva ricevuto risposta alla richiesta, non apre alcun socket per l'ascolto di richieste broadcast. In questo modo, tipicamente, esattamente uno dei server avrà il socket aperto, e solo questo host eseguirà i ping (o `nmblookup`) per gli altri host.

In altre parole, i server sono pigri, lavorano pensando Farò qualcosa solo se nessun altro lo può fare al mio posto.

C'è un'altra funzione che riduce il carico di rete.

Diciamo che hai configurato &lisa; per un aggiornamento ogni dieci minuti. Ora non accedi molto spesso al server. Se nessuno accede al server per l'intero periodo fra un aggiornamento e l'altro, il server eseguirà un aggiornamento (o direttamente o attraverso quello che fa effettivamente il lavoro) e poi raddoppia il proprio periodo di aggiornamento, &ie; il successivo aggiornamento avverrà dopo venti minuti.

Questo avverrà quattro volte, per cui se nessuno accede al server con un periodo di aggiornamento di dieci minuti per molto tempo, l'intervallo di aggiornamento crescerà fino a centosessanta minuti, quasi tre ore. Se a questo punto qualcuno accede ai dati dal server, otterrà una lista vecchia (anche di centosessanta minuti). Accedendo al server si reimposta l'intervallo di aggiornamento al valore iniziale, &ie; dieci minuti, e se l'ultimo aggiornamento è più vecchio di dieci minuti, eseguirà un aggiornamento immediatamente. Quindi, se si ottiene una lista molto vecchia, si può riprovare dopo pochi secondi per avere una lista corrente.

Questo avrà un effetto evidente sui server che non fanno ping (o nmblookup) per proprio conto, dal momento che tipicamente un solo utente vi accederà, ed un effetto minore sul server che fa il ping (o `nmblookup`), visto che questo è interrogato dagli altri server della rete.

`nmblookup`

Il primo client di &lisa; è un ioslave di &kde; 2, quindi si può accedere alla rete con l'URL `lan:://localhost/` o `lan:/`, che contattano entrambi &lisa; sulla macchina locale.

Se c'è una macchina sempre accesa e questa ha &lisa; abilitato, si può usare direttamente il client &lisa; con il server attivo su questa (cioè con l'ioslave menzionato `lan://nome_del_server/`).

Volendo evitare che &lisa; prenda parte alla rete di broadcast, ma faccia la scansione in modo autonomo, si può forzare l'uso di una porta differente con l'opzione da linea di comando `--port` o `-p`. L'uso di questa opzione nel caso generale è vivamente sconsigliato!

&lisa; rilegge il file di configurazione ogni volta che riceve un `SIGHUP`. Inoltre, stampa su stdout alcune informazioni sul proprio stato.

I dati forniti sul socket hanno un formato molto semplice: `<indirizzo ip decimale in network byte order>< uno spazio 0x20><nome completo dell'host><uno '\0' di terminazione><a-capo '\n'<` e l'ultima linea `0 succeeded<'\n'>`

Per esempio,

    17302538 un_host.qualcosa.it
    18285834 linux.qualcosa.it
    17827082 nameserver.qualcosa.it
    0 succeeded

Questo dovrebbe renderne facile l'elaborazione con strumenti informatici.

Su una rete con politica di sicurezza molto stretta, i ping potrebbero essere considerati un potenziale attacco. Se questo è un problema, prova ad usare &reslisa;.

## &reslisa;

Se la rete ha regole di sicurezza molto strette, e non vuoi avere un'ulteriore porta aperta, puoi usare &reslisa;.

Con &reslisa; non si possono eseguire ping a reti o sequenze di indirizzi, si può solo passare a &reslisa; fino a sessantaquattro host per nome nel file di configurazione. Questi riceveranno il ping. Si può ancora usare `nmblookup`.

&reslisa; fornisce l'informazione solo su un socket di dominio unix, &ie; non sulla rete. Il nome del socket è `/tmp/resLisa-TuoLoginName`, in modo che &reslisa; possa essere lanciato da più utenti della macchina contemporaneamente.

&reslisa; può essere installato setuid root, visto che non dovrebbe porre rischi di alcun tipo per la sicurezza. I privilegi diroot vengono lasciati cadere subito dopo la partenza (vedi `strictmain.cpp`), e sono usati solo per creare il socket raw usato per inviare le richieste ICMP.

Inoltre, non invia o riceve richieste broadcast. Il suo primo client è anche un ioslave di &kde; 2 (`rlan:/` in &konqueror; per esempio.)

## Il file di configurazione

Ecco un esempio di file di configurazione:

    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                #also try nmblookup
    FirstWait = 30                          #30 hundredth seconds
    SecondWait = -1                         #only one try
    #SecondWait = 60                         #try twice, and the second time wait 0.6 seconds
    UpdatePeriod = 300                      #update after 300 secs
    DeliverUnnamedHosts = 0                 #don't publish hosts without name
    MaxPingsAtOnce = 256                    #send up to 256 ICMP echo requests at once

### `PingAddresses`

Questa è probabilmente la voce più importante.

Qui vanno inseriti gli indirizzi a cui fare ping. Si possono specificare più sequenze di indirizzi, separati da punto e virgola.

Ci sono quattro modi per definire gli indirizzi:

indirizzo di rete/maschera di rete

  192.168.100.0/255.255.255.0, &ie; un indirizzo IP con la maschera di rete assegnata.

  Questo non deve essere necessariamente l'indirizzo e la maschera di rete della tua macchina. Per esempio, se la tua rete è 10.0.0.0/255.0.0.0, puoi specificare 10.1.2.0/255.255.255.0 se ti interessano solo questi indirizzi. La combinazione indirizzo IP-maschera di rete deve essere separata da una barra / e l'indirizzo non deve essere un vero indirizzo di rete, può anche essere l'indirizzo di un host della rete desiderata, &ie; 10.12.34.67/255.0.0.0 equivale a 10.0.0.0/255.0.0.0 .

una sequenza di indirizzi IP

  Per esempio: 192.168.100.10-192.168.199.19

  Un indirizzo IP da cui cominciare il ping ed un indirizzo IP dove terminare il ping.

  Entrambi gli indirizzi devono essere separati da -

  In questo esempio questo produrrebbe 199-100+1=100, 100*256=25.600, 25.600+(19-10+1)=25.590 indirizzi

Un indirizzo IP, rappresentato da sequenze di ciascuno dei quattro numeri decimali

  un indirizzo IP può essere rappresentato con quattro numeri decimali, e si possono specificare sequenze per ciascuno dei quattro numeri: 192-192.169-171.100-199.0-9

  In questo esempio tutti gli indirizzi IP il cui primo ottetto è 192, il secondo 168, il terzo da 100 a 199 e l'ultimo da 0 a 9 riceveranno un ping, per un totale di 1*1*100*10=1000 indirizzi.

  Questo è probabilmente utile molto raramente. Si possono fornire sequenze per ciascuno dei quatto numeri, sempre divise da -.

Singoli indirizzi IP o hostname

  L'indirizzo IP o l'hostname di una macchina specifica.

Si può anche lasciare il campo vuoto.

### `PingNames`

Qui si possono specificare gli host a cui fare ping usando il loro nome. I nomi devono essere divisi da punti e virgola.

Si può anche lasciare il campo vuoto.

### `AllowedAddresses`

Anche questo è molto importante. &lisa; eseguirà ping agli indirizzi, accetterà client e risponderà a messaggi broadcast solo dagli indirizzi coperti dalla serie di indirizzi inserita in questa linea. Si possono inserire fino a 32 indirizzi di rete/maschere di rete od indirizzi singoli. Questi vanno separati con ';' e non vanno lasciati spazi tra uno e l'altro.

Per esempio, 192.168.0.0/255.255.0.0;192.169.0.0

Una rete intera ed un singolo indirizzo sono validi. Cerca sempre di essere il più preciso possibile. Solitamente, l'uso del tuo indirizzo di rete/maschera di sottorete è una buona scelta.

### `BroadcastNetwork`

Questa voce contiene esattamente una coppia indirizzo di rete/maschera di sottorete. Di solito va bene quella della rete locale, per esempio: 192.0.0/255.255.0.0

### `SearchUsingNmblookup`

Qui si può inserire 0 o 1. 1 indica che &lisa; eseguirà `nmblookup` `"*"` ed analizzerà l'outout del comando. Questo produce meno traffico di rete rispetto all'uso di ping, ma verranno riconosciute solo le macchine con il servizio SMB attivo (cioè macchine &Windows; o macchine con samba attivo).

Abilitando questa opzione e fornendo anche un indirizzo IP a cui fare ping, verrà prima eseguito `nmblookup` ed in seguito il ping. In questo modo verranno scanditi con ping solo gli indirizzi che non hanno reagito alla richiesta `nmblookup`. Questo dovrebbe alleggerire un poco il carico di rete.

### `FirstWait`

Se &lisa; esegue uin ping, &ie; invia richieste di eco ICMP, ne manda un gruppo di seguito, e poi aspetta per il numero di centesimi di secondo specificato qui. Di solito valori compresi tra 5 e 50 vanno bene, il massimo è 99 (0.99 secondi, un tempo molto lungo). Prova a rendere questo valore il più piccolo che permetta di trovare ancora tutti gli host attivi.

### `SecondWait`

Dopo che &lisa; ha inviato le richieste di eco la prima volta, può darsi che alcuni host non vengano trovati. Per migliorare i risultati, &lisa; può eseguire un ping per un'altra volta. Questa volta verranno scanditi solo gli host da cui non si è ricevuta risposta. Se ottieni buoni risultati con un solo ping, puoi disabilitare la seconda scansione impostando SecondWait a `-1`

Altrimenti può essere una buona idea aumentare questo valore rispetto a quello di `FirstWait`, visto che gli host che non sono stati trovati al primo tentativo sono probabilmente più lenti o più lontani, e quindi possono aver bisogno di qualche millisecondo in più per rispondere. Valori fra 5 e 50 sono adeguati; il massimo è 99, e -1 disabilita la seconda scansione.

### `UpdatePeriod`

Questo è l'intervallo di tempo dopo il quale &lisa; si aggiornerà. Trascorso questo lasso di tempo, &lisa; farà di nuovo ping o `nmblookup`, o richiederà nuovamente la lista di host dal server &lisa;.

I valori validi vanno da 30 a 1800 secondi (cioè mezz'ora). Su una rete molto grande, l'intervallo non deve essere troppo basso (per tenere basso il carico di rete). Valori compresi tra 300 e 900 secondi (da 5 a 15 minuti) vanno bene.

Ricorda che il periodo di aggiornamento è raddoppiato se nessuno accede al sever fino a quattro volte, quindi l'intervallo diventerà sedici volte più lungo di quello qui specificato se nessuno accede al server.

### `DeliverUnnamedHosts`

Se viene ricevuta la risposta ad una richiesta di eco da un indirizzo IP di cui &lisa; non riesce a determinare il nome, questa verrà pubblicata sulla porta solo se questa opzione è impostata ad 1.

Non so se questa è una caratteristica utile, ma forse ci sono dei dispositivi di infrastruttura nella rete senza nomi assegnati, in modo che non debbano essere pubblicati. Se vuoi tenerli segreti :-), imposta questo valore a zero. In caso di dubbio, inserisci 0

### MaxPingsAtOnce

Quando fa una scansione, &lisa; invia un gruppo di richieste di eco ed aspetta una risposta. Normalmente sono eseguiti 256 ping di seguito, e di solito non è necessario cambiare questo valore. Aumentandolo troppo, i buffer di ricezione delle richieste di eco diventano troppo piccoli, e quindi l'aggiornamento rallenta.

### Altri tre file di esempio

FIXME

Fai parte di una piccola rete con una maschera di rete di ventiquattro bit, &ie; fino a duecentocinquantasei host:

    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                         #don't use nmblookup
    FirstWait = 20                                   #20 hundredth seconds
    SecondWait = 30                                  #30 hundredth seconds on the seconds try
    UpdatePeriod = 300                               #update after 300 secs
    DeliverUnnamedHosts = 0                          #don't publish hosts without name

File di configurazione per i soli host con SMB

Sei interessato solo agli host con i servizi SMB attivi, e non ci sono router sul network:

    AllowedAddresses = 192.168.100.0/255.255.255.0
    BroadcastNetwork = 192.168.100.0/255.255.255.0
    SearchUsingNmblookup = 1                #use nmblookup
    UpdatePeriod = 300                      #update after 300 secs
    DeliverUnnamedHosts = 0                 #don't publish hosts without name

File di configurazione che usa sia `nmblookup` che il ping

La stessa rete, ma qui è usato sia nbmlookup che 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                #also try nmblookup
    FirstWait = 30                          #30 hundredth seconds
    SecondWait = -1                         #only one try
    #SecondWait = 60                         #try twice, and the second time wait 0.6 seconds
    UpdatePeriod = 300                      #update after 300 secs
    DeliverUnnamedHosts = 0                 #don't publish hosts without name
    MaxPingsAtOnce = 256                    #send up to 256 ICMP echo requests at once

File di configurazione di &reslisa;

Ecco un file di configurazione per &reslisa;. PingAddress non è usato da &reslisa;, e nemmeno BroadcastNetwork.

    PingNames = bb_mail;some_host;some_other_host
    AllowedAddresses = 192.168.0.0/255.255.0.0
    SearchUsingNmblookup = 1                # use nmblookup
    FirstWait = 30                          #30 hundredth seconds
    SecondWait = -1                         #only one try
    #SecondWait = 60                         #try twice, and the second time wait 0.6 seconds
    UpdatePeriod = 300                      #update after 300 secs
    DeliverUnnamedHosts = 1                 #also publish hosts without name
    MaxPingsAtOnce = 256                    #send up to 256 ICMP echo requests at once

## Opzioni da linea di comando ed altri utilizzi

Sono disponibili le seguenti opzioni:

`-v`, `--version`

  Stampa sintetiche informazioni sulla versione del programma.

`-h`, `--help`

  Offre una panoramica delle opzioni disponibili

`-u`, `--unix`

  Cerca prima in `$`HOME`/.lisarc`, poi in `/etc/lisarc`. Questo è il comportamento predefinito.

`-k`, `--kde1`

  Cerca prima nel file `$`HOME`/.kde/share/config/lisarc` e poi in `$`KDEDIR`/share/config/lisarc`.

`-K`, `--kde2`

  Cerca il file `lisarc` in tutte le directory restituite dall'esecuzione di ``kde-config` `--path` config`

`-c`, `--config=`FILE

  Legge FILE e nessun altro file di configurazione.

`-p`, `--port` PORTNR

  Avvia il server su questo numero di porta. Usando questa opzione, &lisa; non potrà cooperare con altre sue istanze sulla rete. L'opzione non è disponibile per &reslisa;

Inviando un segnale Hangup a &lisa; o &reslisa; questi rileggeranno i file di configurazione (``killall` `-HUP lisa``).

Inviando un segnale User1 a &lisa; o &reslisa; questi stamperanno sul canale di output standard alcune informazioni sul loro stato (``killall` `-USR1 lisa``). Se la console da cui &lisa; o &reslisa; sono stati lanciati è stata chiusa, non si otterrà alcun messaggio.

## Riconoscimenti e licenze

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

Traduzione di Luciano Montanaro mikelima@kde.org.

Have fun, Alexander Neundorf neundorf@kde.org

&underFDL; &underGPL;

## Installazione

&lisa; e &reslisa; richiedono la presenza della libreria libstdc++ (ne usano la classe string), non hanno bisogno nè di &Qt; nè di &kde;.

&install.compile.documentation;

### Altri requisiti

Sia &reslisa; che &lisa; aprono un cosiddetto socket raw per inviare e ricevere richieste di eco ICMP (ping). Per fare ciò, richiedono privilegi di root.

&lisa; offre un servizio sulla porta TCP 7741, e dovrebbe essere installato da root ed avviato alla partenza del sistema. Come fare ciò è un fattore pesantemente dipendente dal sistema operativo in uso.

&reslisa; è progettato per essere avviato dall'utente, e non offre niente alla rete. Deve essere installato setuid root.

Usando il kioslave `rlan` da &kde; 2, &reslisa; può essere avviato in modo automatico.

&lisa; legge il file `lisarc`, &reslisa; legge `reslisarc`. volendo configurare i due programmi da &kcontrol;, questi vanno avviati con l'opzione `-K`.

Per maggiori informazioni su dove trovino i file di configurazione, vedi il capitolo su .