Domine o comando `ss` no Linux: Guia completo com exemplos práticos!

O comando ss representa uma alternativa moderna ao clássico netstat. No ambiente Linux, ele permite monitorar e obter informações sobre suas conexões de rede. Descubra como utilizar esta ferramenta.

O comando ss como substituto do netstat

Como substituto para o antigo comando netstat, o comando ss oferece detalhes sobre como seu computador se comunica com outros dispositivos, redes e serviços.

O ss apresenta estatísticas sobre o Protocolo de Controle de Transmissão (TCP), o Protocolo de Datagrama do Usuário (UDP), soquetes Unix (para comunicação entre processos) e soquetes brutos. Os soquetes brutos operam na camada de rede OSI, o que implica que os cabeçalhos TCP e UDP devem ser tratados pelo software aplicativo, e não pela camada de transporte. O Protocolo de Mensagens de Controle da Internet (ICMP) e as mensagens do utilitário ping utilizam soquetes brutos.

Utilizando o Comando ss

O ss já está integrado em distribuições Linux atualizadas, não sendo necessária sua instalação. A saída do comando pode ser extensa, com resultados que ultrapassam 630 linhas, e bastante abrangente.

Apresentamos representações textuais dos resultados obtidos, pois eles não caberiam em uma captura de tela, com o intuito de torná-los mais claros.

Listando Conexões de Rede

Ao executar o comando ss sem opções, ele exibe os soquetes que não estão no estado de escuta.

Para visualizar, digite:

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 representam:

Netid: O tipo de soquete. No exemplo, “u_str” (fluxo Unix), “udp” e “icmp6” (soquete ICMP IP versão 6). Informações adicionais sobre os tipos de soquete no Linux podem ser encontradas nas páginas de manual.
Estado: O estado do soquete.
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).
Endereço Peer:Porta: O endereço remoto e a porta (ou valores equivalentes para soquetes Unix).

Para soquetes UDP, a coluna “Estado” geralmente está vazia. Para soquetes TCP, os possíveis estados são:

LISTEN: Somente no servidor. O soquete aguarda uma solicitação de conexão.
SYN-SENT: Somente no cliente. O soquete enviou uma solicitação de conexão e aguarda aceitação.
SYN-RECEIVED: Somente no servidor. Aguarda confirmação de conexão após aceitar uma solicitação.
ESTABLISHED: Servidor e cliente. Uma conexão funcional foi estabelecida, permitindo a transferência de dados.
FIN-WAIT-1: Servidor e cliente. Aguarda uma solicitação de encerramento ou confirmação de um pedido já enviado.
FIN-WAIT-2: Servidor e cliente. Aguarda solicitação de término de conexão do soquete remoto.
CLOSE-WAIT: Servidor e cliente. Aguarda uma solicitação de término de conexão do usuário local.
CLOSING: Servidor e cliente. Aguarda confirmação da solicitação de término do soquete remoto.
LAST-ACK: Servidor e cliente. Aguarda confirmação do pedido de encerramento enviado ao soquete remoto.
TIME-WAIT: Servidor e cliente. Já enviou confirmação do recebimento do pedido de término do soquete remoto e aguarda para garantir que foi recebido.
CLOSED: Não há conexão, o soquete foi finalizado.

Listando Soquetes em Escuta

Para visualizar os soquetes que estão em modo de escuta, use a opção -l:

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
  

Estes soquetes estão desconectados e em modo de escuta. “rtnl” refere-se ao roteamento netlink, usado para comunicação entre processos do kernel e do espaço do usuário.

Listando Todos os Soquetes

Para listar todos os soquetes, utilize a opção -a (todos):

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.

Listando Soquetes TCP

É possível aplicar um filtro para exibir apenas os soquetes correspondentes. Usando a opção -t (TCP), apenas os soquetes TCP serão exibidos:

ss -a -t

Listando Soquetes UDP

A opção -u (UDP) executa uma ação de filtragem semelhante, exibindo 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 os soquetes Unix, inclua a opção -x (Unix):

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
  

Listando Soquetes Brutos

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

ss -a -w

Listando Soquetes IP versão 4

Soquetes que utilizam o protocolo TCP/IP versão 4 podem ser listados com a opção -4 (IPV4):

ss -a -4

Listando Soquetes IP versão 6

Para ativar o filtro de IP versão 6, use a opção -6 (IPV6):

ss -a -6

Listando Soquetes por Estado

É possível listar soquetes pelo seu estado, como “established”, “listening” ou “closed”. A opção “resolver (-r)” tenta resolver endereços de rede para nomes e portas para protocolos.

O comando abaixo procura conexões TCP estabelecidas e tenta resolver os nomes:

ss -t -r state established

São listadas conexões que estão no estado “established”. O nome do host foi resolvido e “ssh” é exibido em vez de 22 para a conexão SSH.

Pode-se repetir o processo para procurar soquetes em modo 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

A listagem de soquetes pode ser feita por protocolo, utilizando as opções dport (porta de destino) e sport (porta de origem).

Para listar soquetes utilizando o protocolo HTTPS em uma conexão estabelecida, digite:

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

O nome do protocolo ou a porta padrão podem ser utilizados. No caso do Secure Shell (SSH), a porta padrão é 22.

Utilizando o nome do protocolo em um comando e o repetindo com o número da porta:

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

Os resultados obtidos são idênticos.

Listando Conexões para um Endereço IP Específico

Com a opção dst (destino), é possível listar conexões para um determinado endereço IP de destino.

Digite:

ss -a dst 192.168.4.25

Identificando Processos

Para identificar quais processos estão utilizando os soquetes, use a opção de processos (-p), geralmente com o 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))
  

As duas conexões estabelecidas nos soquetes TCP estão sendo utilizadas pelo daemon SSH e pelo Firefox.

Um Sucessor Eficiente

O comando ss oferece as mesmas informações do netstat, de forma mais simplificada e acessível. Consulte a página de manual para mais opções e detalhes.