IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: DissenyXarxesLinux, LinuxAdministracioAvancada
Fitxers: Protocols_de_xarxes_UNIX.pdf
Repositori SVN: http://anonymous@svn.projectes.lafarga.cat/svn/iceupc/DissenyXarxaLocalLinux, http://anonymous@svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%c3%a7ada
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas


Netstat (network statistics) és una comanda que ens mostra les connexions de xarxa, les taules de rutes i altres estadístiques de la xarxa.

Modes

Hi ha 5 modes d'utilitzar netstat:

  • Taula de rutes (paràmetre -r o --route): Mostra la taula de rutes.
  • Taula de interfícies (NICS) (paràmetre -i o --interfaces): Mostra la taula d'interfícies de xarxa (NICs).
  • Estadístiques (paràmetre -s o --statistics): Mostra estadístiques de l'ús de la xarxa per protocols.
  • Masquerade|NAT (paràmetre -M o --masquerade): Mostra connexions emmascarades o NAT (només si el sistema suporta masquerade).
  • Groups (paràmetre -g o --groups): Mostra grups multicast.
  • Llista de Sockets oberts (sense cap dels paràmetres anteriors):

Taula de rutes

Els modes que més ens interessen són els últims ja que el mode taula de rutes:

$ netstat -r
Kernel IP routeing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.196.0   *               255.255.255.0   U         0 0          0 vmnet8
192.168.1.0 *              255.255.255.0   U         0 0          0 eth0
192.168.252.0   *               255.255.255.0   U         0 0          0 vmnet1
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

És equivalent a la comanda [[route].

Interfícies de xarxa

I el mode taula d'interfícies:

$ netstat -ie
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:30:1B:B7:CD:B6  
        inet addr:192.168.1.33  Bcast:192.168.1.255  Mask:255.255.255.0
        inet6 addr: fe80::230:1bff:feb7:cdb6/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:7306 errors:0 dropped:0 overruns:0 frame:0
        TX packets:7941 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:5600875 (5.3 MiB)  TX bytes:1376279 (1.3 MiB)
        Interrupt:209 

lo        Link encap:Local Loopback  
        inet addr:127.0.0.1  Mask:255.0.0.0
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING  MTU:16436  Metric:1
        RX packets:2453 errors:0 dropped:0 overruns:0 frame:0
        TX packets:2453 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0 
        RX bytes:701053 (684.6 KiB)  TX bytes:701053 (684.6 KiB)
 .....................

Estadístiques

És equivalent a la comanda ifconfig. Tot i que cal destacar el mode resumit d'estadístiques de les interfícies de xarxa:

$ netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0   1500 0      7329      0      0      0     7965      0      0      0 BMRU
lo    16436 0      2465      0      0      0     2465      0      0      0 LRU
vmnet  1500 0         0      0      0      0      119      0      0      0 BMRU
vmnet  1500 0         0      0      0      0      119      0      0      0 BMRU

L'opció d'estadístiques pot ser interessant:

$ netstat -s
Ip:
  34829 total packets received
  3 with invalid addresses
  0 forwarded
  0 incoming packets discarded
  34826 incoming packets delivered
  34065 requests sent out
  6 dropped because of missing route
Icmp:
  216 ICMP messages received
  176 input ICMP message failed.
  ICMP input histogram:
      destination unreachable: 3
      echo requests: 1
      echo replies: 36
  1 ICMP messages sent
  0 ICMP messages failed
  ICMP output histogram:
      echo replies: 1
Tcp:
  1432 active connections openings
  2 passive connection openings
  2 failed connection attempts
  19 connection resets received
  1 connections established
  29532 segments received
  28711 segments send out
  83 segments retransmited
  0 bad segments received.
  299 resets sent
Udp:
  5073 packets received
  0 packets to unknown port received.
  0 packet receive errors
  5080 packets sent
  ........................ 

Consultar la taula de NAT

Vegeu conntrack

En sistemes normals (que no siguin router amb NAT activat), no podrem consultar NAT:

$ netstat -M
netstat: no support for `ip_masquerade' on this system.

TODO: exemple de netstat -M router amb NAT.

Consultar sockets oberts

Finalment veiem el mode per defecte de netstat (sockets oberts):

$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.1.33:44914      static-fxfeeds.nslb:www ESTABLISHED
tcp        0      0 192.168.1.33:46436      nobel.upc.es:imaps      ESTABLISHED
udp        0      0 localhost:32768         localhost:32768         ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    4842     @/com/ubuntu/upstart
unix  2      [ ]         DGRAM                    4985     @/org/kernel/udev/udevd
unix  2      [ ]         DGRAM                    10223    @/org/freedesktop/hal/udev_event
............

La sortida de netstat per defecte acostuma a ser bastant llarga ja que mostra absolutament tots els sockets (sovint hem de pàginar amb nestat | more si volem veure tota la sortida). Normalment (si treballem en xarxes i no en programació Linux) els sockets del protocol unix no ens interessen. Podem executar:

netstat -tu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.1.33:46436      nobel.upc.es:imaps      ESTABLISHED
udp        0      0 localhost:32768         localhost:32768         ESTABLISHED

Per saber que volen dir els diferents estats podem consultar la secció Estats TCP de l'article Nivell_de_transport_TCP/IP.

I només ens mostra les connexions establertes dels protocols TCP i UDP. Els paràmetres de protocols són (segons netstat --help):

  • -t|--tcp: TCP
  • -u|--udp: UDP
  • -w|--raw: RAW
  • -x|--unix}: unix
  • --ax25
  • --ipx
  • --netrom

Mostrar només sockets escoltant (LISTEN)

El paràmetre -l ens permet a més consultar les connexions que estan obertes (LISTENING):

$netstat -tul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:2208          *:*                     LISTEN     
tcp        0      0 *:nfs                   *:*                     LISTEN     
tcp        0      0 *:silc                  *:*                     LISTEN     
tcp        0      0 *:49093                 *:*                     LISTEN     
tcp        0      0 *:ldap                  *:*                     LISTEN     
tcp        0      0 localhost:45285         *:*                     LISTEN     
tcp        0      0 *:42152                 *:*                     LISTEN     
tcp        0      0 localhost:mysql         *:*                     LISTEN     
tcp        0      0 *:netbios-ssn           *:*                     LISTEN     
tcp        0      0 *:11211                 *:*                     LISTEN     
tcp        0      0 *:sunrpc                *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 localhost:postgresql    *:*                     LISTEN     
tcp        0      0 *:smtp                  *:*                     LISTEN     
tcp        0      0 *:microsoft-ds          *:*                     LISTEN     
tcp6       0      0 *:ldap                  *:*                     LISTEN     
tcp6       0      0 *:www                   *:*                     LISTEN     
tcp6       0      0 *:ssh                   *:*                     LISTEN     
udp        0      0 *:nfs                   *:*                                
udp        0      0 *:32770                 *:*                                
udp        0      0 *:32771                 *:*                                
udp        0      0 192.168.196.:netbios-ns *:*                                
udp        0      0 192.168.252.:netbios-ns *:*                                
udp        0      0 192.168.1.33:netbios-ns *:*                                
udp        0      0 *:netbios-ns            *:*                                
udp        0      0 192.168.196:netbios-dgm *:*                                
udp        0      0 192.168.252:netbios-dgm *:*                                
udp        0      0 192.168.1.3:netbios-dgm *:*                                
udp        0      0 *:netbios-dgm           *:*                                
udp        0      0 *:703                   *:*                                
udp        0      0 *:bootpc                *:*                                
udp        0      0 *:sunrpc                *:*                                
udp        0      0 *:887                   *:*                                
udp        0      0 192.168.1.33:ntp        *:*                                
udp        0      0 localhost:ntp           *:*                                
udp        0      0 *:ntp                   *:*                                
udp6       0      0 *:ntp                   *:*                     


Estats TCP

Consulteu Nivell_de_transport_TCP/IP#Estats_TCP.

Obtenir el PID dels processos de xarxa

NOTA IMPORTANT: Alguns paràmetres només obtindran tota la informació necessària si executem netstat com a superusuari (root). És el cas del paràmetre -p que ens permet obtenir els pids dels processos linux:

Sense root:

$ netstat -tlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
.............
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 localhost:2208          *:*                     LISTEN     -                   
tcp        0      0 *:nfs                   *:*                     LISTEN     -                   
tcp        0      0 *:silc                  *:*                     LISTEN     -                   
tcp        0      0 *:49093                 *:*                     LISTEN     -                   
tcp        0      0 *:ldap                  *:*                     LISTEN     -                   
tcp        0      0 localhost:45285         *:*                     LISTEN     -                   
tcp        0      0 *:42152                 *:*                     LISTEN     -                   
tcp        0      0 localhost:mysql         *:*                     LISTEN     -                   
tcp        0      0 *:netbios-ssn           *:*                     LISTEN     -                   
.............................

no obtenim les PIDS. Amb root:

$ sudo netstat -tlp
..................
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 localhost:2208          *:*                     LISTEN     4279/hpiod          
tcp        0      0 *:nfs                   *:*                     LISTEN     -                   
tcp        0      0 *:silc                  *:*                     LISTEN     4767/rpc.mountd     
tcp        0      0 *:49093                 *:*                     LISTEN     -                   
tcp        0      0 *:ldap                  *:*                     LISTEN     4598/slapd          
tcp        0      0 localhost:45285         *:*                     LISTEN     4298/python         
tcp        0      0 *:42152                 *:*                     LISTEN     4951/rpc.statd      
tcp        0      0 localhost:mysql         *:*                     LISTEN     4451/mysqld         
tcp        0      0 *:netbios-ssn           *:*                     LISTEN     4873/smbd           
....................................

Altres opcions

Finalment, només comentar que alguns pàrametres controlen si treballem amb númerics o amb noms:

-n, --numeric            don't resolve names
--numeric-hosts          don't resolve host names
--numeric-ports          don't resolve port names
--numeric-users          don't resolve user names

Cal recordar que les traduccions de ports les agafa del fitxer /etc/services i els noms de màquina de DNS o del fitxer /etc/hosts.

si volem obtenir ajuda sobre els diferents paràmetres i opcions podem executar

Ajuda

$ netstat --help

Exemples

Una utilitat típica de nestat és identificar quin procés/aplicació està utilitzant un port concret de comunicacions. Per exemple, Podem consultar amb netstat els processos que estan utilitzant el port 80. A l'article sobre Apache podeu trobar una secció on explica com trobar quin procés ens està bloquejant l'ús del port 80. Les comandes possibles podrien ser:

$netstat -lnp | grep '0.0.0.0:80'
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     28908/apache2

o

$netstat -lnp | grep '80'

o

$ sudo netstat -lnp | grep ":::80"
tcp6       0      0 :::80                   :::*                    LISTEN     28908/apache2

o

$ sudo netstat -lnp | grep apache
tcp6       0      0 :::80                   :::*                    LISTEN     28908/apache2


Si no encertem el filtre adequat (comanda grep) sempre podem mostrar tots els ports i processos amb la següent comanda:

$netstat -A inet -lnp
 
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:901             0.0.0.0:*               LISTEN     1567/rpc.statd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     1396/mysqld
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN     23231/cyrmaster
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN     23231/cyrmaster
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     1049/portmap
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     28908/apache2
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN     23231/cyrmaster
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN     1593/perl
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN     29343/inetd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     29343/inetd
tcp        0      0 0.0.0.0:4949            0.0.0.0:*               LISTEN     24120/munin-node
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     1557/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN     1531/master
udp        0      0 0.0.0.0:898             0.0.0.0:*                          1567/rpc.statd
udp        0      0 0.0.0.0:10000           0.0.0.0:*                          1593/perl
udp        0      0 0.0.0.0:111             0.0.0.0:*                          1049/portmap
udp        0      0 0.0.0.0:895             0.0.0.0:*                          1567/rpc.statd

Llegiu la secció comanda netstat de l'artícle Programació en xarxes per obtenir més exemples d'ús de la comanda netstat.

Vegeu també