Como usar o comando ss no Linux

Uma janela de terminal em um sistema de laptop Linux.
Fatmawati Achmad Zaenuri / Shutterstock

O sscomando é 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 essa ferramenta útil.

O comando ss versus netstat

Um substituto para o obsoleto netstatcomandoss fornece informações detalhadas  sobre como suas comunica computador com outros computadores, redes e serviços.

ss exibe estatísticas para   TCP ( Transmission Control Protocol ),   UDP ( User Datagram Protocol ),  Unix (interprocesso) e sockets raw. Os soquetes brutos  operam no nível OSI da  rede , o que significa que os cabeçalhos TCP e UDP devem ser controlados pelo software do aplicativo, não pela camada de transporte. Mensagens  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 – obtivemos 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 não caberiam em uma captura de tela. Nós os aparamos para torná-los mais gerenciáveis.

Listagem de conexões de rede

Usar sssem opções de linha de comando lista os soquetes que não estão escutando. Ou seja, ele lista os soquetes que não estão no estado de escuta.

Para ver isso, digite o seguinte:

ss

ss em uma janela de terminal

Saída de ss em uma janela de terminal.

Endereço local Recv-Q Send-Q do estado Netid: Endereço do par 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 socket. 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 de manual 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).
  • Endereço do par: Porta : O endereço remoto e a porta (ou valores equivalentes para soquetes Unix).
Recomendado:  Como atualizar jogos Nintendo Switch

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

  • ESCUTAR:  Apenas do lado do servidor. O soquete está aguardando uma solicitação de conexão.
  • SYN-SENT:  apenas do lado do cliente. Este socket fez um pedido de conexão e está esperando para ver se ele é aceito.
  • SYN-RECEIVED:  Apenas do lado do servidor. Este socket está esperando por uma confirmação de conexão após aceitar um pedido de conexão.
  • ESTABELECIDO:  Servidor e clientes. Uma conexão funcional foi estabelecida entre o servidor e o cliente, permitindo a transferência de dados entre os dois.
  • FIN-WAIT-1:  Servidor e clientes. Este soquete está aguardando uma solicitação de término de conexão do soquete remoto ou uma confirmação de uma solicitação de término de conexão que foi enviada anteriormente deste soquete.
  • FIN-WAIT-2:  Servidor e clientes. Este soquete está aguardando uma solicitação de encerramento de conexão do soquete remoto.
  • CLOSE-WAIT:  Servidor e cliente. Este soquete está aguardando uma solicitação de encerramento de conexão do usuário local.
  • ENCERRAMENTO:  Servidor e clientes. Este soquete está aguardando uma confirmação de solicitação de término de conexão do soquete remoto.
  • ÚLTIMO ACK:  Servidor e cliente. Este soquete está aguardando uma confirmação da solicitação de encerramento de conexão enviada ao soquete remoto.
  • TIME-WAIT:  Servidor e clientes. Este soquete enviou uma confirmação ao soquete remoto para informá-lo de que recebeu a solicitação de encerramento do soquete remoto. Agora ele está esperando para ter certeza de que a confirmação foi recebida.
  • CLOSED:  Não há conexão, então o socket foi encerrado.

Listagem de soquetes de escuta

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

ss -l

ss -l em uma janela de terminal.

Endereço local Recv-Q Send-Q do estado Netid: Endereço do par da porta: Processo da porta 
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 / executar / usuário / 1000 / systemd / notificar 32303 * 0

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

Recomendado:  Como adicionar uma estação de carregamento ao criado-mudo (sem estragá-la)

Listando todos os soquetes

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

ss -a

ss -a em uma janela de terminal.

Endereço local Recv-Q Send-Q do estado Netid: Endereço do par da porta: Processo da porta 
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 privado / erro 23225 * 0 
u_str LISTEN 0 100 privado / repetir 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

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

ss -a -t

 ss -a -t em uma janela de terminal.

Listando Sockets UDP

A -uopção (UDP) executa o mesmo tipo de ação de filtragem. Desta vez, veremos apenas soquetes UDP:

ss -a -u

ss -a -u em uma janela de terminal.

Endereço local Recv-Q Send-Q do estado: Endereço do par 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 [::]: * 
DESCONEXÃO 0 0 [::]: 51193 [::]: *

Listando Soquetes Unix

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

ss -a -x

ss -a -x em uma janela de terminal.

Endereço local Recv-Q Send-Q do estado Netid: Endereço do par 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

Listando Soquetes Brutos

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

ss -a -w

ss -a -w em uma janela de terminal.

Listando soquetes de IP versão 4

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

ss -a -4

ss -a -4 em uma janela de terminal.

Listando Soquetes IP Versão 6

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

ss -a -6

ss -a -6 em uma janela de terminal.

Listagem de soquetes por estado

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

Recomendado:  As melhores alternativas para o Google Apps no Android

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

estado ss -t -r estabelecido

estado ss -t -r estabelecido em uma janela de terminal.

Quatro conexões são listadas 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:

estado ss -t -r ouvindo

ss -t -r estado escutando em uma janela de terminal.

Endereço local Recv-Q Send-Q: Endereço do par 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 Sockets 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 de origem, respectivamente.

Digamos o seguinte para listar os soquetes usando o protocolo HTTPS em uma establishedconexão (observe o espaço após o parêntese de abertura e antes do fechamento):

ss -a estado estabelecido '(dport =: https ou sport =: https)'

ss -a estado estabelecido '(dport =: https ou sport =: https)' em uma janela de terminal.

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

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

ss -a '(dport =: ssh ou sport =: ssh)'
ss -a '(dport =: 22 ou esporte =: 22)'

ss -a '(dport =: ssh ou sport =: ssh)' em uma janela de terminal.

Como esperado, obtemos os mesmos resultados.

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

Com a dstopção (destino), podemos listar as conexões para um endereço IP de destino específico.

Nós digitamos o seguinte:

ss -a dst 192.168.4.25

ss -a dst 192.168.4.25 em uma janela de terminal.

Identificação de processos

Para ver quais processos estão usando os sockets, você pode usar a opção de processos ( -p), conforme mostrado abaixo (observe que você deve usar sudo):

sudo ss -t -p

sudo ss -t -p em uma janela de terminal.

Endereço local Recv-Q Send-Q do estado: Endereço do par da porta: Processo da porta 
ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https usuários: (("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 sscomando fornece as mesmas informações fornecidas anteriormente  netstat, mas de forma mais simples e acessível. Você pode verificar a página do manual para obter mais opções e dicas.