Inserisci Infobox

Networking - Diagnosi

I comandi e le tecniche per diagnosticare la rete: netstat, arp, tcpdump.

Network troubleshooting - Introduzione
Autore: al - Ultimo Aggiornamento: 2002-10-16 23:13:18 - Data di creazione: 2002-10-16 23:13:18
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Diagnosticare problemi di rete è attività che difficilmente si spiega a parole.
Per essere in grado di affrontare problematiche di rete complesse (ma anche quelle relativamente triviali) sono necessari diversi skill, non tutti tramandabili facilmente:

1 - Solide basi teoriche e conoscenza dello stack TCP/IP.
Inutile fingere, si deve poter diagnosticare in fretta un problema di DNS rispetto a quello dovuto ad un cavo scollegato, un problema di routing rispetto ad un problema dovuto a troppi errori su una interfaccia.
Per farlo, a prescindere dai sistemi usati, è sempre necessario avere in mente network layers e protocolli.

2 - Esperienza.
Come sempre, i trucchi migliori sono quelli che si acquisiscono sul campo e la familiarità con ambienti e dispositivi specifici ci rende più efficaci e rapidi nelle scelte e nelle implementazioni.

3 - Conoscenza degli strumenti a disposizione.
Qui possiamo dare qualche indicazione utile, valida per quasi tutti gli Unix e anche sistemi Windows:
- ping, traceroute, telnet sono utili per diagnosticare problemi di raggiungibilità di sistemi remoti
- ifconfig, route servono per identificare la configurazione di rete corrente ed evidenziare routing particolari o problemi di errori a livello di interfaccia fisica.
- arp e le arp cache sono sempre da considerare quando si cambia IP di una macchina o la macchina associata ad un IP
- netstat è uno strumento flessibile per identificare connessioni di rete attive e errori e statistiche di traffico su IP, TCP, UDP e ICMP.
- tcpdump, snoop e altri sniffer sono fondamentali quando si devono analizzare nel dettagli dei flussi di pacchetti in rete
- nslookup e dig sono fondamentali per diagnosticare problemi di DNS.

netstat
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 16:10:35 - Data di creazione: 2004-05-23 16:10:35
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Netstat è un comando polifunzionale che ti permettere di verificare le connessioni, le route e statistiche del proprio sistema. Un comando che ogni sys adm deve conoscere alla perfezione, utile per diagnostica e controllo del sistema.

netstat [information-type] [options]
netstat {--help|-h} Richiama l'help

Per selezionare il tipo di informazioni da visualizzare, bisogna mettere come primo argomento una delle seguenti opzioni. Se non si specifica nulla il comando visualizzera' la lista delle socket aperte, opzione di default.

Information Type
--route , -r Visualizza le route impostate sul sistema
--groups , -g Visualizza informazioni riguardanti i multicast group membership (ipv4 e ipv6)
--interface=iface , -i Visualizza le statistiche di tutte le interfacce o della singola interfaccia specificata
--masquerade , -M Verifica le connessioni che hanno subito masquerading
--statistics , -s Visuallizza un sommario di statistiche

Options
--verbose , -v Abilita il verbose mode.
--numeric , -n Non risolve gli Ip e il numero delle porte, risparmiando i tempi per query DNS.
--protocol=family , -A Opzione per  specificare l'address family quando si vuole visualizzare le connessioni.
-c, --continuous Esegue il comando ogni secondo (o ogni intervallo di secondi specificato).
-p, --program Mostra il PID, ed il nome del programma proprietario della socket. Utile per capire, per esempio, quale programma utilizza una specifica porta TCP.
-l, --listening Mostra solo le conessioni in LISTENING
-a, --all  Mostra tutte le connessioni (LISTENING e non), se abbinato al flag -i visualizza  le informazioni per tutte le interfacce

netstat -nlp
Autore: homer - Ultimo Aggiornamento: 2004-12-04 23:02:37 - Data di creazione: 2004-12-04 23:02:37
Tipo Infobox: STDOUT - Skill: 2- JUNIOR

Visualizzazione dei software che mantengono porte in listening, con relativo indirizzo IP.

root@enigma:/# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:2401            0.0.0.0:*               LISTEN      640/inetd
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      773/mysqld
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      640/inetd
tcp        0      0 192.168.0.2:80          0.0.0.0:*               LISTEN      783/httpd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      640/inetd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      643/sshd
tcp        0      0 0.0.0.0:631             0.0.0.0:*               LISTEN      722/cupsd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      692/master
udp        0      0 0.0.0.0:631             0.0.0.0:*                           722/cupsd
...

L'opzione -n visualizza gli indirizzi in formato numerico, -l filtra solamente le porte in stato listen mentre -p visualizza il PID ed il nome del programma che mantiene aperta una determinata porta

netstat -s
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-12 20:08:02 - Data di creazione: 2002-10-12 20:08:02
Tipo Infobox: STDOUT - Skill: 2- JUNIOR

Visualizzazione delle statistiche per quanto riguarda la network.
Utili per capire se il vostro server ha problemi, anomalie in ambito network o semplicemente per dedurre quanto traffico ha prodotto la vostra macchina.

[neo@dido neo]$ netstat -s
Statistiche relative ai pacchetti IP
Ip:
    14743 total packets received
   0 forwarded
    0 incoming packets discarded
   14385 incoming packets delivered
    15907 requests sent out
Statistiche relative ai pacchetti ICMP
Icmp:
   6 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 6
   6 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 6
Statistiche relative ai pacchetti TCP
Tcp:
    1039 active connections openings
   0 passive connection openings
    0 failed connection attempts
   0 connection resets received
    2 connections established
   14419 segments received
   15721 segments send out
   145 segments retransmited
   0 bad segments received.
    25 resets sent
Statistiche relative ai pacchetti UDP
Udp:
    169 packets received
    2 packets to unknown port received.
    0 packet receive errors
    180 packets sent
TcpExt:
    ArpFilter: 0
    567 TCP sockets finished time wait in fast timer
    7 packets rejects in established connections because of timestamp
    269 delayed acks sent
    Quick ack mode was activated 134 times
    16 packets directly queued to recvmsg prequeue.
    400 packets directly received from prequeue
    6182 packets header predicted
    16 packets header predicted and directly queued to user
    TCPPureAcks: 1336
    TCPHPAcks: 1195
    TCPRenoRecovery: 0
    TCPSackRecovery: 0
    TCPSACKReneging: 0
    TCPFACKReorder: 0
    TCPSACKReorder: 0
    TCPRenoReorder: 0
    TCPTSReorder: 0
    TCPFullUndo: 0
    TCPPartialUndo: 0
    TCPDSACKUndo: 0
    TCPLossUndo: 0
    TCPLoss: 0
    TCPLostRetransmit: 0
    TCPRenoFailures: 0
    TCPSackFailures: 1
    TCPLossFailures: 0
    TCPFastRetrans: 0
    TCPForwardRetrans: 0
    TCPSlowStartRetrans: 0
    TCPTimeouts: 69
    TCPRenoRecoveryFail: 0
    TCPSackRecoveryFail: 0
    TCPSchedulerFailed: 0
    TCPRcvCollapsed: 0
    TCPDSACKOldSent: 158
    TCPDSACKOfoSent: 29
    TCPDSACKRecv: 0
    TCPDSACKOfoRecv: 0
    TCPAbortOnSyn: 0
    TCPAbortOnData: 4
    TCPAbortOnClose: 34
    TCPAbortOnMemory: 0
    TCPAbortOnTimeout: 8
    TCPAbortOnLinger: 0
    TCPAbortFailed: 0
    TCPMemoryPressures: 0

netstat -rn
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-14 18:03:20 - Data di creazione: 2002-10-14 18:03:20
Tipo Infobox: STDOUT - Skill: 2- JUNIOR

Visualizzazione delle route configurate sul sistema.
L'output e' identico al comando route -n , l'unica differenza dei due comandi e' il PATH; ovvero il comando route non e' all'interno dei path settati di default da RH linux per i normali utenti netstat invece si.

Output del comando netstat.
[neo@dido neo]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.208.0   0.0.0.0         255.255.255.0   U        40 0          0 eth0  
Route per i pacchetti che hanno come destinazione  la propria network
127.0.0.0       0.0.0.0         255.0.0.0       U        40 0          0 lo  
Route per i pacchetti che hanno come destinazione  lo
0.0.0.0         192.168.208.254 0.0.0.0         UG       40 0          0 eth0  
Route che identifica il default gw

Output del comando route. Da notare che si e' dovuto specificare il path assoluto del comando!
[neo@dido neo]$ route -n
bash: route: command not found
[neo@dido neo]$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.208.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0  
Route per i pacchetti che hanno come destinazione  la propria network
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo  
Route per i pacchetti che hanno come destinazione  lo
0.0.0.0         192.168.208.254 0.0.0.0         UG    0      0        0 eth0  
Route che identifica il default gw

Problemi con tcpdump su Unix diversi
Autore: neo - Ultimo Aggiornamento: 2003-04-04 21:43:17 - Data di creazione: 2003-04-04 21:43:17
Tipo Infobox: ETCETERA - Skill: 3- INTERMEDIATE

Per far funzionare tcpdump su alcuni OS occorrono alcuni accorgimenti.

SunOS con nit o bpf:  Permessi di lettura /dev/nit or /dev/bpf*.  
Solaris con dlpi: Accesso in lettura e scrittura al network pseudo device, Es.  /dev/le.  
HP-UX con dlpi: Essere root o tcpdump installato con setuid a root.  
IRIX con snoop: Essere root o tcpdump installato con setuid a root.  
Linux:  Essere root o tcpdump installato con setuid a root.
Ultrix e Digital UNIX: Abilitare il promiscue-mode da root e tramite pconfig abilitare l'utilizzo a tcpdump a chiunque.
BSD: Permessi di lettura a /dev/bpf

tcpdump
Autore: neo - Ultimo Aggiornamento: 2003-04-04 22:44:28 - Data di creazione: 2003-04-04 22:44:28
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Tcpdump è un ottimo sniffer che permette di monitorare il traffico di rete con filtri flessibili per limitare l'output a video secondo varie regole di matching di pacchetti.

tcpdump [ options ] [ expression ]
-a Tenta di risolvere  network e broadcast address
-c [count] Esegue l'exit dopo aver raccolto tot pacc
-F [file] Specifica di utilizzare un file in input per le expression
-i Specifica l'interfaccia da cui sniffare
-n Non risolve gli indirizzi ip
-nn Non risolve ne gli ip ne il numero delle porte
-p Non abilita il promiscuous  mode sull'interfacce da cui tcpdump e' in ascolto
-v,-vv,-vvvAbilita il verbose mode
-x Printa ogni paccheto sniffato

Le expression servono per limitare il matching dei pacchetti
proto Specifica il protocollo [tcp,udp,ether etc...]
dst host [host] Specifica l'host di destinazione dei pacchetti
dst net Specifica la network di destinazione dei pacchetti
dst port Specifica la porta di destinazione dei pacchetti
src host [host] Specifica l'host sorgente dei pacchetti
src netSpecifica la network sorgente dei pacchetti
src port Specifica la porta sorgente dei pacchetti
`!' o `not' Simbolo di negazione, ovvero inverte il matching
`&&' or `and' Simbolo di concatenazione, visualizza il pacchetto che fa il match di tutte le regole concatenate
`||' or `or Simbolo di alternanza, visualizza il paccheto o con questa opzione o con quest'altra

Usare tcpdump su una macchina remota
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-16 18:51:58 - Data di creazione: 2002-10-16 18:51:58
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Quando lanciate il comando tcpdump, su una macchina remota con una sola interfaccia oppure dovete sniffare il traffico dalla stessa interfaccia da cui avete aperto la connessione, dovrete utilizzare dei filtri per evitare di sniffare il vostro stesso traffico telnet o ssh e ricadere in vorticosi loop che rendono l'opera di analisi dei pacchetti improba.

Se mi collego ad un host remoto con SSH, dovro' sniffare tutto tranne i pacchetti con src e dst port 22
[root@morpheus pub]# tcpdump -i eth0  ! port 22
Kernel filter, protocol ALL, datagram packet socket
tcpdump: listening on eth0
[ Traffico sniffato ]

Per Interrompere Ctrl-c

Se devo sniffare ANCHE pacchetti SSH, ma non quelli generati dalla mia connessione posso scrivere (ipotizzando che il mio IP sorgente sia 10.0.0.10):
tcpdump -n -i eth0  ! host 10.0.0.10
(Notare il -n per evitare che venga fatto un DNS reverse lookup dell'IP 10.0.0.10, rendendo inefficace il filtro)

arp
Autore: neo - Ultimo Aggiornamento: 2002-10-12 20:02:55 - Data di creazione: 2002-10-12 20:02:55
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Comando che ti permette di visualizzare e manipolare le voci di arp nella cache del sistema.
Come la maggior parte dei comandi relativi alla network ottiene informazioni dal proc file-system (/proc/net/arp)

Visualizzazione del contenuto di tutta la cache, oppure specificando l'host solo l'arp del suddetto host
arp [opzioni]  -a [hostname]
Cancellazzione dell'arp di uno specifico host
arp [opzioni]  -d hostname
Creazione manuale di uno specifico arp di un host
arp  [opzioni] -s hostname hw_addr [opzioni]

Options
-v, --verbose Abilita il verbose mode
-n, --numeric Non esegue il DNS lookup degli indirizzi ip
-H type, --hw-type type, -t type Specifica quale classe di arp deve visualizzare,cancellare inserire. ( ARCnet (arc­net) , PROnet (pronet) , AX.25 (ax25)  and  NET/ROM (netrom). Default=ether)
-i If, --device If Specifica l'interfaccia
-e Visualizza il risultato in linux standard

ttcp - Network Benchmark Tools
Autore: neo - Ultimo Aggiornamento: 2003-11-16 19:49:46 - Data di creazione: 2003-11-16 19:49:46
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

TTCP, test TCP è  un tool Open Source originariamente scritto da  Mike Muuss  che permette di verificare le performance (Throughput) della propria network evitando di scrivere o leggere dati su disco dando dunque la possibilità di testare anche network basate su fibra.
Il test si basa sull'invio e ricezione di pacchetti UDP o TCP tramite due host oppure utilizzandolo come "network pipe" , quindi con un terzo host che ha la funzione di inviare e ricevere, è possibile verificare il Throughput di un segmento di network che originariamente per motivi di routing o strutturali non possono colloquiare fra di loro.

Installazione
L'installazione non richiede nessuna particolare attenzione, sia tramite rpm o compilazione dei sorgenti. Per i primi ci si può appoggiare ai vari repository come http://www.rpmfind.net per trovare il package più adatto per i sorgenti si possono  trovare in rete in varti ftp server pubblici come
Installazione da RPM
[root@dido root]# wget ftp://216.254.0.38/linux/redhat/9/en/os/i386/RedHat/RPMS/ttcp-1.12-7.i386.rpm
--11:12:45--  ftp://216.254.0.38/linux/redhat/9/en/os/i386/RedHat/RPMS/ttcp-1.12-7.i386.rpm
           => `ttcp-1.12-7.i386.rpm'
Connecting to 216.254.0.38:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /linux/redhat/9/en/os/i386/RedHat/RPMS ... done.
==> PORT ... done.    ==> RETR ttcp-1.12-7.i386.rpm ... done.
Length: 12,259 (unauthoritative)

100%[=================================================================================>] 12,259        33.72K/s    ETA 00:00

11:12:47 (33.72 KB/s) - `ttcp-1.12-7.i386.rpm' saved [12259]

[root@dido root]# rpm -ihv /home/neo/fastweb/ttcp-1.12-7.i386.rpm
Preparing...                ########################################### [100%]
   1:ttcp                   ########################################### [100%]
[root@dido root]# rpm -qil ttcp
Name        : ttcp                         Relocations: (not relocateable)
[...]
Binario
/usr/bin/ttcp
Manual e file README
/usr/share/doc/ttcp-1.12
/usr/share/doc/ttcp-1.12/README
/usr/share/man/man1/ttcp.1.gz

Installazione da sorgenti
[root@dido root]# wget http://www.netcordia.com/tools/tools/TTCP/ttcp.c
--11:22:11--  http://www.netcordia.com/tools/tools/TTCP/ttcp.c
           => `ttcp.c'
Resolving www.netcordia.com... done.
Connecting to www.netcordia.com[63.208.176.20]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 19,554 [text/plain]

100%[=================================================================================>] 19,554        60.81K/s    ETA 00:00

11:22:12 (60.81 KB/s) - `ttcp.c' saved [19554/19554]
[root@dido root]# gcc -O3 -o ttcp ttcp.c
ttcp.c:539: warning: static declaration for `gettimeofday' follows non-static


Esempi di uso
Qualunque sia la funzione del test o l'invio dati tramite ttcp occorre attivarlo almeno su due host, sul primo in modalità "trasmitter" e il secondo in modalità "receiver".

Abilitazione del receiver tramite l'opzione  -r, maggior verbosità con l'opzione -v e l'opzione -s per eviatre che i dati in stdin vengano printati sullo stdout.
La porta di ascolto di default è la 5001

[root@nefertiti root]# ttcp -r -v -s
ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001  tcp
ttcp-r: socket
Abilitazione del trasmitter tramite l'opzione -t , specificando nella linea di comando l'host receiver o l'host che ha la funzione di network pipe e come era per il receiver anche qui l'opzione -s è dobbligo se si vuole effetuare un test.
[root@pippo root]# ttcp -t -v -s 192.168.1.2  
Esempio Risulato
Per un considerare un  test valido vengono richiesti almeno dieci secondi di trasferimento dati.

ttcp-r: accept from 192.168.1.5
ttcp-t: 16777216 bytes in 408.85 real seconds = 40.07 KB/sec +++
ttcp-t: 16777216 bytes in 0.00 CPU seconds = 1638400000.00 KB/cpu sec
ttcp-t: 2048 I/O calls, msec/call = 204.42, calls/sec = 5.01
ttcp-t: 0.0user 0.0sys 6:48real 0% 0i+0d 0maxrss 0+2pf 0+0csw
ttcp-t: buffer address 0x8050000
Esempio di utilizzo di ttcp come "network pipe"
[root@pippo root]# ttcp -rvs | ttcp -tvs 192.168.1.5
ttcp-r: socket
ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5001  tcp  -> 192.168.1.5
ttcp-t: socket
ttcp-t: connect
In questo caso tutto il traffico ricevuto dall'host pippo sulla porta 5001 verrà dirottato sull'host 192.168.1.5

ttcp
Autore: neo - Ultimo Aggiornamento: 2003-11-16 19:51:51 - Data di creazione: 2003-11-16 19:51:51
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

Utility per test di network performance per protocollo UDP e TCP.

ttcp -t [-options] host [ < in ]
ttcp -r [-options > out]


Opzioni comuni
-l ## lunghezza dei buffer da leggere o scrivere sulla network (default 8192)
-u Specifica di utilizzare il protocollo UDP al posto di TCP
-p ## Specifica la porta in listening o la porta a cui inviare i pacchetti(default 5001)
-s Lato receiver i dati ricevuti vengono scartati, lato trasmitter viene specificato di non aspettarsi nulla dallo stdin
      
-v Abilita il verbose mode      
-d Abilita il debugging delle socket
-f X Specifica l'unità di misura: k,K = kilo{bit,byte}; m,M = mega; g,G = giga

Opzioni trasmitter
-n## Numero di buffers da scrivere sulla network(default 2048)
-D Setta l'opzione TCP_NODELAY

Privacy Policy