mercoledì 12 gennaio 2011

Monitorare le connessioni di rete del computer con netstat

Un computer collegato in rete è raggiungibile mediante l'indirizzo IP ad esso associato. L'indirizzamento a un particolare processo in esecuzione o servizio sulla medesima macchina prevede un ulteriore numero, detto numero di porta (port number). Solo in questo modo due applicazioni di rete possono scambiare dati tra loro, che altrimenti giungerebbero presso l'interfaccia di rete senza un ulteriore destinazione locale.
Va subito detto che non tutti i processi necessitano di una comunicazione di rete, qualora ciò fosse invece necessario l'applicazione dovrà implementare mediante socket (a cui è associato un numero di porta) la comunicazione e gestirla attraversa un protocollo di trasporto (ad esempio TCP o UDP). Una socket in attesa di comunicazioni è detta in stato di ascolto (listen).
Su ogni computer sono eseguiti in background dei servizi di rete, ognuno di questi prevede dunque delle connessioni in ingresso e/o uscita. Per alcuni servizi il numero di porta è stato fissato, ad esempio: 21 per ftp (file transfer protocol), 23 per telnet, 25 per smtp (simple mail transfer protocol) etc... Il file /etc/services contiene un elenco dei servizi di rete ed altre informazioni sui servizi configurati presso un computer, per accedere a queste informazioni occorre usare il comando netstat.
La lista delle opzioni e delle cose che è possibile osservare con netstat è davvero lunga, mi limiterò pertanto ad elencare le opzioni più comuni. Come sempre, maggiori informazioni sul comando possono essere cercate nelle pagine del manuale con man netstat.
  • -a: mostra tutte le connessioni, attive e in ascolto;
  • -l: mostra solo le connessioni in ascolto (listening);
  • -t: mostra le connessioni su TCP;
  • -u: mostra le connessioni su UDP;
  • -p: mostra i programmi che utilizzano le connessioni (per ogni programma viene indicato il PID e il nome del processo);
  • -n: disabilita il reverse lookup nell'output, gli indirizzi vengono sostituiti con i rispettivi IP;
  • -r: mostra la tabella di routing;
  • -s: mostra le statistiche, per ogni protocollo di rete;
  • -c: le statistiche vengono aggiornata ogni secondo;
  • -i: mostra le statistiche relative alle interfacce di rete riconosciute dal kernel;
L'output generato dal comando netstat è solitamente molto lungo, non dimenticate di combinarlo con i comandi less, more o grep.

martedì 11 gennaio 2011

Risolvere domini registrati e indirizzi IP: host

host è un utility per la risoluzione dei nomi attraverso il servizio offerto dai domain name server (DNS). Con il comando host possiamo risolvere un nome di dominio (registrato) in un indirizzo IP e viceversa. La sintassi del comando, nella sua forma base, è la seguente: host indirizzo. La ricerca e quindi l'output del comando può essere perfezionata attraverso l'uso delle opzioni previste dal comando. Per una lista completa di tali opzioni consultate la relativa pagina del manuale, con il comando man host. Il comando host svolge bene il suo compito senza ulteriori opzioni.
Gli indirizzi dei server DNS sono solitamente scritti nel file /etc/resolv.conf (ricevuti in fase di login alla propria rete, mediante protocollo DHCP). Possiamo in ogni caso dire al comando di svolgere la ricerca presso un diverso server DNS con il comando host indirizzo server.


Alternative al comando host: nslookup e dig.

lunedì 10 gennaio 2011

Verificare la raggiungibilità di un host: ping

Il comando ping invia un messaggio di tipo ECHO_REQUEST a un host della rete, indicato fra i parametri passati al comando. La sintassi prevista dal comando è la seguente: ping opzioni host. Se vi occorre conoscere la raggiungibilità di un host il comando ping è uno dei primi strumenti da utilizzare in fase di verifica (successivamente si può indagare sulla raggiungibilità dell'host attraverso il comando traceroute).
Nella sintassi del comando, il parametro host può essere sia un indirizzo IP che un nome di dominio (che il comando provvede a risolvere mediante chiamata a DNS). Se invochiamo il comando senza ulteriori opzioni quest'ultimo invierà all'host da contattare (se raggiungibile) un numero infinito di pacchetti ICMP. Ecco allora una piccola lista delle opzioni più comuni da passare al comando:
  • -c numero: specifica il numero di richieste da inviare all'host da contattare;
  • -w tempo: permette di regolare il tempo di attesa (in millisecondi) per la ricezione delle richieste di echo (il valore di default è pari a 1000 ms);
  • -l dimensione: permette di regolare la dimensione (in byte) del pacchetto di echo (il valore di default è pari a 32 byte);
  • -i tempo: permette di regolare il tempo di attesa (in secondi) che intercorre fra l'invio di un pacchetto e il successivo (il valore di default è 1 s);
L'output restituito dal comando riassume l'attività di ping che si è appena conclusa (se nel comando non abbiamo specificato il numero di richieste da inviare, possiamo terminare l'esecuzione del comando attraverso la pressione dei tasti ctrl e c). Sullo standard output viene mostrato: il numero di pacchetti inviati, la percentuale di pacchetti persi, la durata dell'attività di ping e i valori statistici del round trip time (rtt), il tempo impiegato dal pacchetto per raggiungere l'host di destinazione e tornare, quindi, all'host sorgente). Nell'output del comando ping possiamo leggere il valore minimo e massimo del rtt, quello medio e la deviazione standard. Questi ultimi valori risulteranno più precisi solo se il numero di richieste inviate dal comando ping è sufficientemente alto.