Comando ss: Obtendo informações sobre a rede - Linux
O comando ss
netstat
netstat
O comando ss
: exibe todos os sockets.-a, --all
: converte endereços IP em nomes de domínio.-r, --resolve
: exibe sockets que estão ouvindo por conexões.-l, --listening
: exibe informações detalhadas sobre os sockets.-e, --extended
: mostra informações sobre o uso de memória pelos sockets.-m, --memory
: mostra os processos que estão utilizando os sockets.-p, --processes
: mostra as threads que estão utilizando os sockets.-T, --threads
: fornece informações internas do TCP.-i, --info
: apresenta um resumo do uso dos sockets.-s, --summary
: exibe continuamente os sockets à medida que são destruídos.-E, --events
: exibe apenas os sockets da versão IP 4.-4, --ipv4
: exibe apenas os sockets da versão IP 6.-6, --ipv6
: exibe apenas sockets TCP.-t, --tcp
: exibe apenas sockets UDP.-u, --udp
Por exemplo, para obter todas as informações sobre conexões de rede, usamos o comando ss -a
programicio@Programicio:~$ ss -a Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:kernel * nl UNCONN 0 0 rtnl:code/4486 * nl UNCONN 0 0 rtnl:chrome/3688 * nl UNCONN 0 0 rtnl:goa-daemon/3300 * nl UNCONN 0 0 rtnl:evolution-addre/3353 * nl UNCONN 0 0 rtnl:avahi-daemon/1461 * nl UNCONN 0 0 rtnl:NetworkManager/1531 * nl UNCONN 0 0 rtnl:xdg-desktop-por/3452 * tcp ESTAB 0 0 192.168.0.108:55950 5.255.255.70:https tcp ESTAB 0 0 192.168.0.108:54012 142.250.185.206:https tcp ESTAB 0 0 192.168.0.108:37494 185.125.190.20:https tcp ESTAB 0 0 192.168.0.108:48670 142.250.185.206:https tcp LISTEN 0 511 *:http *:* tcp LISTEN 0 4096 [::1]:ipp [::]:*
A tabela exibida pelo comando ss
: mostra o tipo de socket, comoNetid
(netlink), que é usado para a troca de informações entre o kernel do Linux e os processos do usuário.nl
: estado do socket, com valores comuns como ESTAB (estabelecido), UNCONN (não conectado) e LISTEN (ouvindo).State
eRecv-Q
: número de pacotes aguardando para serem recebidos ou enviados, respectivamente.Send-Q
eLocal Address
: endereços local e remoto, junto com os respectivos portos.Peer Address
Para facilitar a identificação dos endereços, você pode usar a opção -r
programicio@Programicio:~$ ss -ar Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp ESTAB 0 0 Programicio:55950 yandex.ru:https tcp ESTAB 0 0 Programicio:54012 google.com:https tcp ESTAB 0 0 Programicio:37494 ubuntu.com:https tcp ESTAB 0 0 Programicio:48670 google.com:https tcp LISTEN 0 511 *:http *:* tcp LISTEN 0 4096 [::1]:ipp [::]:*
Além disso, você pode visualizar apenas conexões que estão ouvindo, utilizando a opção ss -l
ss -t
-p
Filtros
O comando ss
: filtra por um endereço de destino específico.dst
: filtra por um endereço de saída específico.src
: filtra pelo estado do socket.state
Por exemplo, para encontrar todas as conexões que estão se dirigindo ao endereço "64.233.165.113" (google.com):
programicio@Programicio:~$ ss dst 64.233.165.113 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.0.108:46334 64.233.165.113:https
Neste caso, foi usado um endereço específico, mas também é possível filtrar apenas por um endereço:
ss src 192.168.0.108
Ou apenas por um porto:
programicio@Programicio:~$ ss src :55854 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.0.108:55854 185.125.190.29:https
Para obter nomes de host em vez de endereços IP, assim como em casos gerais, você pode usar o sinalizador -r
ss -r src 192.168.0.108
É possível usar ambos os filtros de uma vez:
ss -a src :55854 or dst :https
Neste caso, obtemos todas as conexões onde a máquina local utiliza o porto 55854, ou onde o host remoto utiliza HTTPS.
Ou podemos filtrar por sockets TCP que estão no estado listening
programicio@Programicio:~$ ss -t state listening Recv-Q Send-Q Local Address:Port Peer Address:Port 0 4096 127.0.0.53%lo:domain 0.0.0.0:* 0 4096 127.0.0.54:domain 0.0.0.0:* 0 4096 127.0.0.1:ipp 0.0.0.0:* 0 511 *:http *:* 0 4096 [::1]:ipp [::]:*
Filtrando por Texto
Assim como com outros comandos, você pode obter a saída de texto do comando e buscar um texto específico, por exemplo, usando o comando grep
programicio@Programicio:~$ ss -r | grep "1e100.net" udp ESTAB 0 0 Programicio:33724 lq-in-f94.1e100.net:https udp ESTAB 0 0 Programicio:33813 lb-in-f94.1e100.net:https udp ESTAB 0 0 Programicio:49685 lu-in-f103.1e100.net:https tcp ESTAB 0 0 Programicio:36868 lg-in-f101.1e100.net:https tcp FIN-WAIT-1 0 605 Programicio:58502 lq-in-f154.1e100.net:https tcp ESTAB 0 0 Programicio:53820 lr-in-f94.1e100.net:https tcp ESTAB 0 540 Programicio:60092 lq-in-f154.1e100.net:https tcp ESTAB 0 0 Programicio:46016 lg-in-f95.1e100.net:https tcp ESTAB 0 0 Programicio:39640 os-in-f94.1e100.net:https
Neste caso, a busca é por conexões que estão direcionadas a domínios no "1e100.net".