Como usar o comando ss no Linux

Publicados: 2022-01-29
Uma janela de terminal em um sistema de laptop Linux.
Fatmawati Achmad Zaenuri/Shutterstock

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 comando netstat obsoleto, ss fornece 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 de usuário (UDP), Unix (entre processos) e soquetes brutos. Os soquetes brutos operam no nível OSI da rede, o que significa que os cabeçalhos TCP e UDP precisam ser manipulados pelo software do aplicativo, não pela camada de transporte. As mensagens do protocolo ICMP (Internet Control Message Protocol) e o utilitário ping usam soquetes brutos.

Usando ss

Você não precisa instalar ss , pois 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 Endereço Local: Endereço do peer da porta: Processo da porta
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 dos 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.
  • Local Address:Port : 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).
Propaganda

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. Esse 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 Endereço Local: Endereço do peer da porta: Processo da porta 
nl UNCONN 0 0 rtnl:NetworkManager/535 * 
nl UNCONN 0 0 rtnl:evolution-addre/2987 * 
...
u_str OUÇA 0 4096 /run/systemd/private 13349 * 0 
u_seq OUÇA 0 4096 /run/udev/control 13376 * 0 
u_str OUÇA 0 4096 /tmp/.X11-unix/X0 33071 * 0 
u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 
u_str OUÇA 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 Endereço Local: Endereço do peer da porta: Processo da porta 
nl UNCONN 0 0 rtnl:NetworkManager/535 * 
nl UNCONN 0 0 rtnl:evolution-addre/2987 * 
...
u_str OUÇA 0 100 public/showq 23222 * 0 
u_str OUÇA 0 100 privado/erro 23225 * 0 
u_str OUÇA 0 100 privado/tente novamente 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 OUÇA 0 128 [::]:ssh [::]:* 
tcp OUÇA 0 5 [::1]:ipp [::]:* 
tcp OUÇA 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 

 Estado Recv-Q Send-Q Endereço Local: Endereço do Ponto da Porta: Processo da Porta 
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:domínio 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 Endereço Local: Endereço do peer da porta: Processo da porta 
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 state . 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.

Propaganda

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

 ss -t -r estado estabelecido 

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 estado escutando 

 Recv-Q Send-Q Endereço Local: Endereço do peer da porta: Processo da porta 
0 128 localhost:5939 0.0.0.0:* 
0 4096 localhost%lo:domínio 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 os soquetes usando o protocolo HTTPS em uma conexão established (observe o espaço após o parêntese de abertura e antes do de fechamento):

 ss -a state estabeleceu '( dport = :https or sport = :https )' 

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

Propaganda

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

 ss -a '( dport = :ssh ou esporte = :ssh )'
 ss -a '( dport = :22 ou esporte = :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 

 Estado Recv-Q Send-Q Endereço Local: Endereço do Ponto da Porta: Processo da Porta 
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 usuários:(("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 a página man para mais opções e dicas.

RELACIONADO: Melhores laptops Linux para desenvolvedores e entusiastas