Cómo usar el comando ss en Linux

Contenidos

Una ventana de terminal en un sistema portátil Linux.

los ss El comando es un reemplazo moderno del clásico. netstat. Puede usarlo en Linux para obtener estadísticas sobre sus conexiones de red. Aquí se explica cómo trabajar con esta práctica herramienta.

El comando ss versus netstat

Un reemplazo para lo obsoleto netstat mando, ss te da información detallada sobre cómo se comunica su computadora con otras computadoras, redes y servicios.

ss muestra estadísticas de Protocolo de Control de Transmisión (TCP), Protocolo de datagramas de usuario (UDP), Unix (interproceso)y enchufes crudos. Zócalos crudos operar en el nivel OSI de red, lo que significa que los encabezados TCP y UDP deben ser manejados por el software de la aplicación, no por la capa de transporte. Protocolo de mensajes de control de Internet (ICMP) y los silbido la utilidad ambos usan sockets sin procesar.

Usando ss

No tienes que instalar ss, ya que ya forma parte de una distribución de Linux actualizada. Sin embargo, su salida puede ser muy larga; hemos obtenido resultados que contienen más de 630 líneas. Los resultados también son muy amplios.

Debido a esto, hemos incluido representaciones de texto de los resultados que obtuvimos, ya que no cabrían en una captura de pantalla. Los hemos recortado para que sean más manejables.

Listado de conexiones de red

Utilizando ss sin opciones de línea de comandos enumera los sockets que no están escuchando. Es decir, enumera los sockets que no están en estado de escucha.

Para ver esto, escriba lo siguiente:

ss

Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

Las columnas son las siguientes:

  • Netid: El tipo de enchufe. En nuestro ejemplo, tenemos “u_str”, un flujo Unix, un “udp” e “icmp6”, un socket ICMP versión 6 IP. Puede encontrar más descripciones de Tipos de sockets de Linux en las páginas de manual de Linux.
  • Estado: El estado en el que se encuentra el zócalo.
  • Recv-Q: El número de paquetes recibidos.
  • Enviar-Q: El número de paquetes enviados.
  • Dirección local: Puerto: La dirección y el puerto locales (o valores equivalentes para sockets Unix).
  • Dirección del mismo nivel: Puerto: La dirección y el puerto remotos (o valores equivalentes para sockets Unix).

Para los sockets UDP, la columna «Estado» suele estar en blanco. Para los sockets TCP, puede ser uno de los siguientes:

  • ESCUCHA: Solo del lado del servidor. El socket está esperando una solicitud de conexión.
  • SIN-ENVIAR: Solo del lado del cliente. Este socket ha realizado una solicitud de conexión y está esperando a ver si se acepta.
  • SYN-RECIBIDO: Solo del lado del servidor. Este socket está esperando una confirmación de conexión después de aceptar una solicitud de conexión.
  • ESTABLECIDO: Servidor y clientes. Se ha establecido una conexión de trabajo entre el servidor y el cliente, lo que permite que los datos se transfieran entre los dos.
  • FIN-WAIT-1: Servidor y clientes. Este conector está esperando una solicitud de terminación de conexión desde el conector remoto, o un acuse de recibo de una solicitud de terminación de conexión que se envió previamente desde este conector.
  • FIN-WAIT-2: Servidor y clientes. Este conector está esperando una solicitud de terminación de la conexión del conector remoto.
  • CIERRE-ESPERA: Servidor y cliente. Este conector está esperando una solicitud de terminación de la conexión del usuario local.
  • CLAUSURA: Servidor y clientes. Este conector está esperando un acuse de recibo de solicitud de terminación de conexión del conector remoto.
  • ÚLTIMO RECONOCIMIENTO: Servidor y cliente. Este conector está esperando un acuse de recibo de la solicitud de terminación de la conexión que envió al conector remoto.
  • TIEMPO DE ESPERA: Servidor y clientes. Este conector envió un acuse de recibo al conector remoto para hacerle saber que recibió la solicitud de terminación del conector remoto. Ahora está esperando para asegurarse de que se recibió el acuse de recibo.
  • CERRADO: No hay conexión, por lo que el socket se ha terminado.

Listado de enchufes de escucha

Para ver las tomas de escucha, agregaremos el -l (escuchando) opción, así:

ss -l

Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process 
nl    UNCONN 0      0                             rtnl:NetworkManager/535                * 
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              * 
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0 
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0 
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0 
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0 
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0 
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

Todos estos enchufes están desconectados y escuchando. El «rtnl» significa enrutamiento de enlace de red, que se utiliza para transferir información entre el kernel y los procesos del espacio de usuario.

Listado de todos los enchufes

Para enumerar todos los enchufes, puede utilizar el -a (todo) opción:

ss -a

Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process 
nl    UNCONN 0      0                  rtnl:NetworkManager/535               * 
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 * 
...
u_str LISTEN 0      100       public/showq 23222                            * 0 
u_str LISTEN 0      100      private/error 23225                            * 0 
u_str LISTEN 0      100      private/retry 23228                            * 0 
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:* 
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:* 
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:* 
tcp   LISTEN 0      5               [::1]:ipp                            [::]:* 
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

La salida contiene todos los enchufes, independientemente del estado.

Listado de sockets TCP

También puede aplicar un filtro para que solo se muestren los sockets coincidentes. Usaremos el -t (TCP), por lo que solo se enumerarán los sockets TCP:

ss -a -t

Listado de sockets UDP

los -u (UDP) realiza el mismo tipo de acción de filtrado. Esta vez, solo veremos sockets UDP:

ss -a -u

State  Recv-Q Send-Q    Local Address:Port Peer   Address:Port Process 
UNCONN 0      0               0.0.0.0:631         0.0.0.0:* 
UNCONN 0      0               0.0.0.0:mdns        0.0.0.0:* 
UNCONN 0      0               0.0.0.0:60734       0.0.0.0:* 
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:* 
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 
UNCONN 0      0                   [::]:mdns          [::]:* 
UNCONN 0      0                   [::]:51193         [::]:*

Listado de sockets Unix

Para ver solo sockets Unix, puede incluir el -x (Unix), como se muestra a continuación:

ss -a -x

Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process 
u_str ESTAB 0      0                                * 41826            * 41827 
u_str ESTAB 0      0                                * 23183            * 23184 
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639 
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885 
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

Listado de enchufes sin procesar

El filtro para enchufes crudos es el -w opción (sin procesar):

ss -a -w

Listado de enchufes IP versión 4

Los sockets que utilizan el protocolo TCP / IP versión 4 se pueden enumerar utilizando el -4 (IPV4) opción:

ss -a -4

Listado de enchufes IP versión 6

Puede activar el filtro correspondiente de la versión 6 de IP con el -6 (IPV6), así:

ss -a -6

Listado de enchufes por estado

Puede enumerar los sockets por el estado en el que se encuentran con el state opción. Esto funciona con estados establecidos, de escucha o cerrados. También usaremos la opción de resolución (-r), que intenta resolver las direcciones de red en nombres y los puertos en protocolos.

El siguiente comando buscará conexiones TCP establecidas y ss intentará resolver los nombres:

ss -t -r state established

Se enumeran cuatro conexiones que están en el estado establecido. El nombre de host, ubuntu20-04, se ha resuelto y se muestra «ssh» en lugar de 22 para la conexión SSH en la segunda línea.

Podemos repetir esto para buscar sockets en el estado de escucha:

ss -t -r state listening

Recv-Q Send-Q Local Address:Port   Peer Address:Port Process 
0      128        localhost:5939        0.0.0.0:* 
0      4096    localhost%lo:domain      0.0.0.0:* 
0      128          0.0.0.0:ssh         0.0.0.0:* 
0      5          localhost:ipp         0.0.0.0:* 
0      100        localhost:smtp        0.0.0.0:* 
0      128             [::]:ssh         [::]:* 
0      5      ip6-localhost:ipp         [::]:* 
0      100    ip6-localhost:smtp        [::]:*

Listado de sockets por protocolo

Puede enumerar los sockets usando un protocolo particular con el dport y sport opciones, que representan los puertos de origen y destino, respectivamente.

Escribimos lo siguiente para enumerar los sockets que utilizan el protocolo HTTPS en un established conexión (tenga en cuenta el espacio después del paréntesis de apertura y antes del cierre):

ss -a state established ‘( dport = :https or sport = :https )’

Podemos usar el nombre del protocolo o el puerto normalmente asociado con ese protocolo. El puerto predeterminado para Cubierta segura (SSH) es el puerto 22.

Usaremos el nombre del protocolo en un comando y luego lo repetiremos usando el número de puerto:

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Como era de esperar, obtenemos los mismos resultados.

Listado de conexiones a una dirección IP específica

Con el dst (destino), podemos enumerar las conexiones a una dirección IP de destino en particular.

Escribimos lo siguiente:

ss -a dst 192.168.4.25

Identificación de procesos

Para ver qué procesos están usando los sockets, puede usar la opción de procesos (-p), como se muestra a continuación (tenga en cuenta que debe usar sudo):

sudo ss -t -p

State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process 
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151)) 
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

Esto nos muestra que las dos conexiones establecidas en los sockets TCP están siendo utilizadas por el demonio SSH y Firefox.

Un digno sucesor

los ss El comando proporciona la misma información proporcionada previamente por netstat, pero de una forma más sencilla y accesible. Puedes ver el página man para obtener más opciones y consejos.

setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.