GNU/Linux >> Tutoriales Linux >  >> Linux

10 ejemplos del comando ss de Linux para monitorear conexiones de red

ss - estadísticas de socket

En un tutorial anterior, vimos cómo usar el comando netstat para obtener detalles sobre las conexiones de red/socket. Sin embargo, el comando netstat ha quedado en desuso durante mucho tiempo y se reemplazó por el comando ss del conjunto de herramientas iproute.

El comando ss es capaz de mostrar detalles sobre las conexiones de red con más información que el comando netstat y es más rápido. El comando netstat lee varios archivos /proc para recopilar información. Sin embargo, este enfoque es más lento cuando hay muchas conexiones para mostrar.

El comando ss obtiene su información directamente del espacio del kernel. Las opciones utilizadas con los comandos ss son muy similares a netstat, lo que lo convierte en un reemplazo fácil.

Entonces, en este tutorial, veremos algunos ejemplos de cómo usar el comando ss para verificar las conexiones de red y las estadísticas de socket.

1. Listar todas las conexiones

El comando más simple es listar todas las conexiones.

$ ss | less
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port
u_str  ESTAB      0      0                    * 15545                 * 15544
u_str  ESTAB      0      0                    * 12240                 * 12241
u_str  ESTAB      0      0      @/tmp/dbus-2hQdRvvg49 12726                 * 12159
u_str  ESTAB      0      0                    * 11808                 * 11256
u_str  ESTAB      0      0                    * 15204                 * 15205
.....

Estamos canalizando la salida a menos para que la salida sea desplazable. La salida contendrá todos los detalles de conexión de socket tcp, udp y unix.

2. Filtrar conexiones tcp,udp o unix

Para ver solo las conexiones tcp, udp o unix, use la opción t, u o x.

$ ss -t
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
ESTAB      0      0           192.168.1.2:43839     108.160.162.37:http
ESTAB      0      0           192.168.1.2:43622     199.59.149.201:https
ESTAB      0      0           192.168.1.2:33141      83.170.73.249:ircd
ESTAB      0      0           192.168.1.2:54028     74.125.135.125:xmpp-client
$ ss -t
OR
$ ss -A tcp

De forma predeterminada, la opción "t" solo informará solo aquellas conexiones que están "establecidas" o CONECTADAS". No informa los sockets tcp que están "ESCUCHANDO". Use la opción '-a' junto con t, para informar todos a la vez.

Listar todas las conexiones upp

$ ss -ua
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
UNCONN     0      0           192.168.1.2:48268                  *:*
UNCONN     0      0           192.168.1.2:56575                  *:*
UNCONN     0      0                     *:40309                  *:*
UNCONN     0      0           192.168.1.2:56879                  *:*
UNCONN     0      0                     *:49014                  *:*
UNCONN     0      0           192.168.1.2:53124                  *:*
UNCONN     0      0             127.0.1.1:domain                 *:*
$ ss -a -A udp
The a option tells ss to report both "CONNECTED" and "LISTENING" sockets. Since UDP is a connection-less protocol, just "ss -u" will not report anything in most cases. Therefore we use the "a" option report all UDP connections (connected and listening).

Del mismo modo, use la opción x para enumerar todas las conexiones de socket de Unix.

3. No resolver el nombre de host

Para obtener la salida más rápido, use la opción "n" para evitar que ss resuelva las direcciones IP en nombres de host. Pero esto también evitará la resolución de los números de puerto.

$ ss -nt
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80
ESTAB      0      0             192.168.1.2:51350      74.125.200.84:443
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667
ESTAB      0      0             192.168.1.2:54028     74.125.135.125:5222
ESTAB      0      0             192.168.1.2:48156      66.196.120.44:5050

4. Mostrar solo enchufes de escucha

Esto mostrará una lista de todos los enchufes de escucha. Por ejemplo, el servidor web apache abre una conexión de socket en el puerto 80 para escuchar las conexiones entrantes.

$ ss -ltn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      5                 127.0.1.1:53                       *:*
LISTEN     0      128               127.0.0.1:631                      *:*
LISTEN     0      128                     ::1:631                     :::*

El comando anterior enumera todas las conexiones "tcp" que "escuchan". La opción n deshabilita la resolución del nombre de host de las direcciones IP, lo que proporciona una salida más rápida.

Para enumerar todas las conexiones UDP que escuchan, reemplace t por u

$ ss -lun
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
UNCONN     0      0                 127.0.1.1:53                       *:*
UNCONN     0      0                         *:68                       *:*
UNCONN     0      0               192.168.1.2:123                      *:*
UNCONN     0      0                 127.0.0.1:123                      *:*
UNCONN     0      0                         *:123                      *:*
UNCONN     0      0                         *:5353                     *:*
UNCONN     0      0                         *:47799                    *:*
UNCONN     0      0                         *:25322                    *:*
UNCONN     0      0                        :::54310                   :::*
.....

5. Imprimir nombre de proceso y pid

Para imprimir el nombre del proceso/pid que posee la conexión, use la opción p

$ ss -ltp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*
LISTEN     0      128           127.0.0.1:9050                   *:*
LISTEN     0      128                   *:90                     *:*
LISTEN     0      128                   *:db-lsp                 *:*        users:(("dropbox",3566,32))
LISTEN     0      5             127.0.0.1:6600                   *:*
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0))

En el resultado anterior, la última columna contiene el nombre del proceso y el pid. En este ejemplo, dnsmasq es el nombre del proceso y 1299 es el pid.

$ sudo ss -ltp
[sudo] password for enlightened:
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*        users:(("master",2051,12))
LISTEN     0      128                   *:90                     *:*        users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6))
LISTEN     0      5             127.0.0.1:6600                   *:*        users:(("mpd",2392,5))
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))
LISTEN     0      16                    *:2633                   *:*        users:(("oned",1853,16))
LISTEN     0      50            127.0.0.1:mysql                  *:*        users:(("mysqld",1095,10))
LISTEN     0      5             127.0.1.1:domain                 *:*        users:(("dnsmasq",1347,5))
LISTEN     0      32                    *:ftp                    *:*        users:(("vsftpd",1051,3))
LISTEN     0      128                   *:ssh                    *:*        users:(("sshd",1015,3))
LISTEN     0      128           127.0.0.1:ipp                    *:*        users:(("cupsd",688,11))
LISTEN     0      128                  :::http                  :::*        users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))
LISTEN     0      128                  :::ssh                   :::*        users:(("sshd",1015,4))
LISTEN     0      128                 ::1:ipp                   :::*        users:(("cupsd",688,10))

6. Imprimir resumen de estadísticas

La opción s imprime las estadísticas.

$ ss -s
Total: 526 (kernel 0)
TCP:   10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total     IP        IPv6
*	  0         -         -
RAW	  0         0         0
UDP	  15        9         6
TCP	  10        9         1
INET	  25        18        7
FRAG	  0         0         0

7. Mostrar información del temporizador

Con la opción '-o' se mostraría la información horaria de cada conexión. La información del temporizador indica cuánto tiempo con

$ ss -tn -o
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80
ESTAB      0      0             192.168.1.2:36335     204.144.140.26:80     timer:(keepalive,26sec,0)
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667
ESTAB      0      0             192.168.1.2:58857      74.121.141.84:80     timer:(keepalive,23sec,0)
ESTAB      0      0             192.168.1.2:42794     173.194.40.239:80     timer:(keepalive,32sec,0)

8. Mostrar solo conexiones de socket IPv4 o IPv6

Para mostrar solo las conexiones de socket IPv4, use la opción '-finet' o '-4'.

$ ss -tl -f inet
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*
LISTEN     0      128           127.0.0.1:9050                   *:*
LISTEN     0      128                   *:90                     *:*
LISTEN     0      128                   *:db-lsp                 *:*
LISTEN     0      5             127.0.0.1:6600                   *:*

Para mostrar solo las conexiones IPv6, use la opción '-finet6' o '-6'.

$ ss -tl6
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100                 ::1:smtp                  :::*
LISTEN     0      128                  :::12865                 :::*
LISTEN     0      128                  :::http                  :::*
LISTEN     0      128                  :::ssh                   :::*
LISTEN     0      128                 ::1:ipp                   :::*

9. Filtrado de conexiones por estado tcp

El comando ss admite filtros que se pueden usar para mostrar solo conexiones específicas. La expresión de filtro debe tener un sufijo después de todas las opciones. El comando ss acepta el filtro en el siguiente formato.

$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

Ahora, aquí hay algunos ejemplos de cómo filtrar las conexiones de socket por estado de socket.
Para mostrar todos los sockets IPv4 tcp que están en estado "conectado".

$ ss -t4 state established
Recv-Q Send-Q         Local Address:Port             Peer Address:Port
0      0                192.168.1.2:54436          165.193.246.23:https
0      0                192.168.1.2:43386          173.194.72.125:xmpp-client
0      0                192.168.1.2:38355           199.59.150.46:https
0      0                192.168.1.2:56198          108.160.162.37:http

Mostrar sockets con estado de tiempo de espera

$ ss -t4 state time-wait
Recv-Q Send-Q         Local Address:Port             Peer Address:Port
0      0                192.168.1.2:42261           199.59.150.39:https
0      0                  127.0.0.1:43541               127.0.0.1:2633

El estado puede ser cualquiera de los siguientes

1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all - All of the above states
12. connected - All the states except for listen and closed
13. synchronized - All the connected states except for syn-sent
14. bucket - Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
15. big - Opposite to bucket state.

Tenga en cuenta que muchos estados como syn-sent, syn-recv no mostrarían ningún socket la mayor parte del tiempo, ya que los sockets permanecen en dichos estados por un tiempo muy corto. Sería ideal utilizar el comando watch para detectar dichos estados de socket en tiempo real.

Aquí hay un ejemplo

$ watch -n 1 "ss -t4 state syn-sent"

Después de ejecutar el comando anterior, intente abrir algún sitio web en un navegador o descargue algo de alguna URL. Inmediatamente debería ver las conexiones de los sockets que aparecen en la salida, pero por muy poco tiempo.

Every 1.0s: ss -t4 state syn-sent                   Tue Apr  1 10:07:33 2014
Recv-Q Send-Q           Local Address:Port               Peer Address:Port
0      1                  192.168.1.2:55089            202.79.210.121:https
0      1                  192.168.1.2:33733             203.84.220.80:https
0      1                  192.168.1.2:36240             106.10.198.33:https

10. Filtrar conexiones por dirección y número de puerto

Además de los estados del socket tcp, el comando ss también admite el filtrado según la dirección y el número de puerto del socket. Los siguientes ejemplos lo demuestran.

Muestra todas las conexiones de socket con el puerto de origen o destino de ssh.

$ ss -at '( dport = :ssh or sport = :ssh )'
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      128                   *:ssh                    *:*
LISTEN     0      128                  :::ssh                   :::*

Tomas con puerto de destino 443 o 80

$ ss -nt '( dst :443 or dst :80 )'
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:58844      199.59.148.82:443
ESTAB      0      0             192.168.1.2:55320     165.193.246.23:443
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80
ESTAB      0      0             192.168.1.2:54889    192.241.177.148:443
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80
ESTAB      0      0             192.168.1.2:33440      38.127.167.38:443

La siguiente sintaxis también funcionaría

$ ss -nt dst :443 or dst :80

Más ejemplos

# Filter by address
$ ss -nt dst 74.125.236.178
# CIDR notation is also supported
$ ss -nt dst 74.125.236.178/16
# Address and Port combined
$ ss -nt dst 74.125.236.178:80

Los puertos también se pueden filtrar con las opciones dport/sport. Los números de puerto deben tener un prefijo ":".

$ ss -nt dport = :80
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80
ESTAB      0      0             192.168.1.2:55043     74.125.236.178:80

Lo anterior es lo mismo que> ss -nt dst :80

Algunos ejemplos más de filtrado

# source address is 127.0.0.1 and source port is greater than 5000
$ ss -nt src 127.0.0.1 sport gt :5000
# local smtp (port 25) sockets
$ sudo ss -ntlp sport eq :smtp
# port numbers greater than 25
$ sudo ss -nt sport gt :1024
# sockets with remote ports less than 100
$ sudo ss -nt dport \< :100
# connections to remote port 80
$ sudo ss -nt state connected dport = :80

Los siguientes operadores son compatibles al comparar números de puerto

<= or le : Less than or equal to port
>= or ge : Greater than or equal to port
== or eq : Equal to port
!= or ne : Not equal to port
< or gt : Less than to port
> or lt : Greater than to port

Resumen

Los ejemplos anteriores cubren la mayor parte de lo que admite el comando ss. Para obtener más información, consulte las páginas man.

La documentación de la sintaxis del filtro se puede encontrar en el paquete iproute2-doc que se puede instalar en los sistemas debian/ubuntu

$ sudo apt-get install iproute2-doc

El archivo /usr/share/doc/iproute2-doc/ss.html contiene detalles sobre la sintaxis del filtro del comando ss.


Linux
  1. Ejemplos de comandos sa en Linux

  2. w Ejemplos de comandos en Linux

  3. Ejemplos de comandos ac en Linux

  4. Ejemplos de comandos df en Linux

  5. Ejemplos de comandos du en Linux

16 ejemplos de comandos de eco en Linux

9 ejemplos de comandos tee en Linux

20 ejemplos de comandos ps para monitorear procesos de Linux

Cómo usar el Comando ss (Supervisar las Conexiones de Red)

Ejemplos de comandos ifconfig de Linux

Ejemplos de comandos id en Linux