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. Aqui está como trabalhar com esta útil ferramenta.
O comando ss versus netstat
Um substituto para o obsoleto comando netstat
, ss
dá-lhe informação detalhada sobre como o seu computador se comunica com outros computadores, redes e serviços.
ss
mostra estatísticas para o Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interprocessador), e soquetes brutos. Os soquetes brutos operam no nível OSI da rede, o que significa que os cabeçalhos TCP e UDP devem ser manuseados pelo software aplicativo, e não pela camada de transporte. As mensagens ICMP (Internet Control Message Protocol) e o utilitário ping usam ambos soquetes brutos.
Using 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, já tivemos resultados contendo mais de 630 linhas. Os resultados também são muito largos.
Por isso, incluímos representações em texto dos resultados obtidos, pois eles não caberiam em uma captura de tela. Nós os aparamos para torná-los mais gerenciáveis.
Listing Network Connections
Using ss
sem opções de linha de comando lista 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
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 * 41826 * 41827u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688u_str ESTAB 0 0 * 35550 * 35551...u_str ESTAB 0 0 * 38127 * 38128u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242u_str ESTAB 0 0 * 19039 * 19040u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306icmp6 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 tomada. No nosso exemplo, temos “u_str”, um fluxo Unix, um “udp” e “icmp6”, um socket ICMP versão 6 IP. Você pode encontrar mais descrições dos tipos de socket Linux nas páginas man do Linux.
- State: O estado do socket está em.
- 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 porta (ou valores equivalentes para soquetes Unix).
- Endereço do par:Porta: O endereço remoto e porta (ou valores equivalentes para soquetes Unix).
Para soquetes UDP a coluna “Estado” normalmente está em branco. Para soquetes TCP pode ser um dos seguintes:
- OUÇA: Apenas no lado do servidor. O socket está à espera de um pedido de ligação.
- SYN-SENT: Apenas para o lado do cliente. Este socket fez um pedido de conexão e está à espera para ver se é aceite.
- SYN-RECEIVED: Apenas para o 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 socket está aguardando um pedido de terminação de conexão do socket remoto, ou um reconhecimento de um pedido de terminação de conexão que foi previamente enviado deste socket.
- FIN-WAIT-2: Servidor e clientes. Este socket está aguardando um pedido de terminação de conexão do soquete remoto.
- CLOSE-WAIT: Servidor e cliente. Este socket está aguardando um pedido de terminação de conexão do usuário local.
- CLOSE-WAIT: Servidor e cliente: Servidor e clientes. Este soquete está aguardando uma confirmação de pedido de terminação de conexão do soquete remoto.
- LAST-ACK: Servidor e cliente. Este socket está aguardando uma confirmação do pedido de terminação da conexão que ele enviou ao socket remoto.
- TIME-WAIT: Servidor e clientes. Este socket enviou uma confirmação para o socket remoto para que este saiba que recebeu o pedido de terminação do socket 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 terminado.
Listing Listening Sockets
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
Estes soquetes são todos desconectados e escutando. O “rtnl” significa roteamento de link de rede, que é usado para transferir informação entre processos do kernel e do espaço do usuário.
Listing All Sockets
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 :ipp :* tcp LISTEN 0 100 :smtp :*
>A saída contém todos os soquetes, independentemente do estado.
Listing TCP Sockets
Pode também aplicar um filtro para que apenas os soquetes correspondentes sejam exibidos. Vamos usar a opção -t
(TCP), assim apenas os soquetes TCP serão listados:
ss -a -t
Listar soquetes UDP
A opção -u
(UDP) executa o mesmo tipo de ação de filtragem. Desta vez, veremos apenas tomadas 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 :*
Listing Unix Sockets
Para ver apenas tomadas Unix, pode incluir a opção -x
(Unix), como 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
Lista de Tomadas em Bruto
O filtro para tomadas em bruto é a opção -w
(em bruto):
ss -a -w
Listagem de tomadas IP Versão 4
As tomadas usando o protocolo TCP/IP versão 4 podem ser listadas usando a opção -4
(IPV4):
ss -a -4
Listar IP Versão 6 Sockets
Pode ligar o filtro IP versão 6 correspondente com a opção -6
(IPV6), como tal:
ss -a -6
Listar Tomadas por Estado
Pode listar tomadas pelo estado em que se encontram com a opção state
. Isto funciona com estados estabelecidos, escutando, ou fechados. Também usaremos a opção de resolução (-r
), que tenta resolver endereços de rede para nomes, e portas para protocolos.
O seguinte comando procurará conexões TCP estabelecidas, e ss
tentará resolver os nomes:
ss -t -r state established
Quatro conexões estão listadas que estão no estado estabelecido. O hostname, ubuntu20-04, foi resolvido e “ssh” é mostrado ao invés de 22 para a conexão SSH na segunda linha.
Podemos repetir isto 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 :*
Listing Sockets By Protocol
Pode listar os soquetes usando um protocolo particular com as opções dport
e sport
, que representam as portas de destino e de origem, respectivamente.
Digitamos o seguinte para listar os soquetes usando o protocolo HTTPS em uma conexão established
(note o espaço após o parêntese de abertura e antes do parêntese 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 Secure Shell (SSH) é a porta 22.
Usaremos o nome do protocolo em um comando, e então o repetiremos usando o número da porta:
ss -a '( dport = :22 or sport = :22 )'
Como esperado, obtemos os mesmos resultados.
Listing Connections to a Specific IP Address
Com a opção dst
(destination), podemos listar conexões para um endereço IP de destino específico.
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
), como mostrado abaixo (note que você deve usar sudo
):
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))
Isto 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 por netstat
, mas de uma forma mais simples e acessível. Você pode conferir a página de manual para mais opções e dicas.