Como usar o comando ss no Linux

O comando ss é um substituto moderno para o clássico netstat. Você pode usá-lo no Linux para obter estatísticas sobre suas conexões de rede. Veja como trabalhar com esta ferramenta útil.

O comando ss versus netstat

Um substituto para o obsoleto comando netstat, ss dá-lhe informações detalhadas sobre como seu computador se comunica com outros computadores, redes e serviços.

ss exibe estatísticas para protocolo de Controle de Transmissão (TCP), Protocolo de datagrama do usuário (UDP), Unix (entre processos)e soquetes brutos. Soquetes brutos operar no nível de rede OSI, o que significa que os cabeçalhos TCP e UDP devem ser manipulados pelo software do aplicativo, não pela camada de transporte. Protocolo de mensagens de controle da Internet (ICMP) e as mensagens ping utilitário ambos usam soquetes brutos.

Usando ss

Você não precisa instalar o ss, pois ele já faz parte de uma distribuição Linux atualizada. Sua saída, no entanto, pode ser muito longa – tivemos resultados contendo mais de 630 linhas. Os resultados também são muito amplos.

Por causa disso, incluímos representações de texto dos resultados obtidos, pois eles não caberiam em uma captura de tela. Nós os aparamos para torná-los mais gerenciáveis.

Listando conexões de rede

O uso de ss sem opções de linha de comando lista os soquetes que não estão ouvindo. Ou seja, ele lista os soquetes que não estão no estado de escuta.

Para ver isso, digite o seguinte:

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

As colunas são as seguintes:

Netid: O tipo de soquete. Em nosso exemplo, temos “u_str”, um fluxo Unix, um “udp” e “icmp6”, um soquete ICMP IP versão 6. Você pode encontrar mais descrições de Tipos de soquete do Linux nas páginas man do Linux.
Estado: O estado em que o soquete está.
Recv-Q: O número de pacotes recebidos.
Send-Q: O número de pacotes enviados.
Endereço local:Porta: O endereço local e a porta (ou valores equivalentes para soquetes Unix).
Peer Address:Port: O endereço remoto e a porta (ou valores equivalentes para soquetes Unix).

Para soquetes UDP, a coluna “Estado” geralmente fica em branco. Para soquetes TCP, pode ser um dos seguintes:

OUÇA: Apenas no lado do servidor. O soquete está aguardando uma solicitação de conexão.
SYN-SENT: Apenas no lado do cliente. Este soquete fez uma solicitação de conexão e está aguardando para ver se é aceito.
SYN-RECEIVED: Apenas no lado do servidor. Este soquete está aguardando uma confirmação de conexão após aceitar uma solicitação de conexão.
ESTABELECIDO: Servidor e clientes. Uma conexão de trabalho foi estabelecida entre o servidor e o cliente, permitindo que os dados sejam transferidos entre os dois.
FIN-WAIT-1: Servidor e clientes. Este soquete está aguardando uma solicitação de encerramento de conexão do soquete remoto ou uma confirmação de um pedido de encerramento de conexão que foi enviado anteriormente desse soquete.
FIN-WAIT-2: Servidor e clientes. Este soquete está aguardando uma solicitação de término de conexão do soquete remoto.
CLOSE-WAIT: Servidor e cliente. Este soquete está aguardando uma solicitação de término de conexão do usuário local.
FECHAMENTO: Servidor e clientes. Este soquete está aguardando uma confirmação de solicitação de término de conexão do soquete remoto.
LAST-ACK: Servidor e cliente. Este soquete está aguardando uma confirmação da solicitação de término de conexão que ele enviou ao soquete remoto.
TIME-WAIT: Servidor e clientes. Esse soquete enviou uma confirmação ao soquete remoto para informá-lo de que recebeu a solicitação de término do soquete remoto. Agora está aguardando para ter certeza de que a confirmação foi recebida.
FECHADO: Não há conexão, então o soquete foi encerrado.

Listando soquetes de escuta

Para ver os soquetes de escuta, adicionaremos a opção -l (escuta), assim:

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

Esses soquetes estão todos desconectados e ouvindo. O “rtnl” significa roteamento netlink, que é usado para transferir informações entre os processos do kernel e do espaço do usuário.

Como listar todos os soquetes

Para listar todos os soquetes, você pode usar a opção -a (all):

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                           [::]:*

A saída contém todos os soquetes, independentemente do estado.

Como listar soquetes TCP

Você também pode aplicar um filtro para que apenas os soquetes correspondentes sejam exibidos. Usaremos a opção -t (TCP), para que apenas os soquetes TCP sejam listados:

ss -a -t

Como listar soquetes UDP

A opção -u (UDP) executa o mesmo tipo de ação de filtragem. Desta vez, veremos apenas soquetes 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         [::]:*

Listando soquetes Unix

Para ver apenas soquetes Unix, você pode incluir a opção -x (Unix), conforme mostrado abaixo:

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

Como listar soquetes brutos

O filtro para sockets raw é a opção -w (raw):

ss -a -w

Listagem de soquetes IP versão 4

Os soquetes que usam o protocolo TCP/IP versão 4 podem ser listados usando a opção -4 (IPV4):

ss -a -4

Listagem de soquetes IP versão 6

Você pode ativar o filtro de IP correspondente da versão 6 com a opção -6 (IPV6), assim:

ss -a -6

Listagem de soquetes por estado

Você pode listar os soquetes pelo estado em que estão com a opção de estado. Isso funciona com estados estabelecidos, de escuta ou fechados. Também usaremos a opção resolver (-r), que tenta resolver endereços de rede para nomes e portas para protocolos.

O comando a seguir procurará conexões TCP estabelecidas e ss tentará resolver os nomes:

ss -t -r state established

São listadas quatro conexões que estão no estado estabelecido. O nome do host, ubuntu20-04, foi resolvido e “ssh” é mostrado em vez de 22 para a conexão SSH na segunda linha.

Podemos repetir isso para procurar soquetes no estado de escuta:

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        [::]:*

Listando soquetes por protocolo

Você pode listar os soquetes usando um protocolo específico com as opções dport e sport, que representam as portas de destino e origem, respectivamente.

Digitamos o seguinte para listar sockets usando o protocolo HTTPS em uma conexão estabelecida (observe o espaço após o parêntese de abertura e antes do de fechamento):

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

Podemos usar o nome do protocolo ou a porta normalmente associada a esse protocolo. A porta padrão para Capsula segura (SSH) é a porta 22.

Usaremos o nome do protocolo em um comando e o repetiremos usando o número da porta:

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

Como esperado, obtemos os mesmos resultados.

Listando conexões para um endereço IP específico

Com a opção dst (destino), podemos listar as conexões para um determinado endereço IP de destino.

Digitamos o seguinte:

ss -a dst 192.168.4.25

Identificando Processos

Para ver quais processos estão usando os soquetes, você pode usar a opção de processos (-p), conforme mostrado abaixo (observe que você deve 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))

Isso nos mostra que as duas conexões estabelecidas nos soquetes TCP estão sendo usadas pelo daemon SSH e pelo Firefox.

Um Sucessor Digno

O comando ss fornece as mesmas informações fornecidas anteriormente pelo netstat, mas de forma mais simples e acessível. Você pode conferir o página de manual para mais opções e dicas.