Comando ss: verificar portas e processos no Linux, comparado com o netstat
Em um servidor Linux, o comando ss mostra quais portas estão abertas e quem está conectado. O ss é a ferramenta de consulta de sockets do iproute2 que substitui o netstat. Ao consultar com o ss as portas em escuta (LISTEN) e as conexões em um servidor Debian 12, confirmamos que, em uma conta comum, o nome dos programas iniciados por outras contas não aparece na coluna Process, mesmo com -p.
As saídas abaixo foram obtidas com um locale em inglês. Os endereços do servidor e da outra ponta aparecem como endereços de exemplo.
1️⃣ Uso básico do comando ss e colunas da saída
Se você executar o ss sem opções, as portas em escuta ficam de fora e só aparecem os sockets com conexão estabelecida. No servidor de teste, as primeiras linhas eram todas sockets Unix (u_str, u_dgr) que os programas do próprio servidor usam para se comunicar entre si.
ss | head -n 5Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 * 1013903 * 1013904
u_dgr ESTAB 0 0 * 1013960 * 13394
u_str ESTAB 0 0 * 1013907 * 1013908
u_str ESTAB 0 0 * 46066198 * 46066199Por isso, para ver só as conexões TCP, adicione -t. Os sockets Unix somem e, no lugar do número da porta, aparecem nomes de serviço como ssh e https.
ss -tState Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 203.0.113.10:ssh 198.51.100.7:51114
ESTAB 0 0 203.0.113.10:26676 192.0.2.15:https
ESTAB 0 0 203.0.113.10:29714 192.0.2.16:httpsSe você adicionar também -n, os números de porta aparecem como estão, sem virar nomes de serviço.
ss -tnState Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 203.0.113.10:22 198.51.100.7:51114
ESTAB 0 0 203.0.113.10:26676 192.0.2.15:443
ESTAB 0 0 203.0.113.10:29714 192.0.2.16:443As colunas Recv-Q e Send-Q significam coisas diferentes conforme o estado do socket. Em um socket conectado, Recv-Q é o número de bytes recebidos que o programa ainda não leu, e Send-Q é o número de bytes enviados cujo recebimento a outra ponta ainda não confirmou.
Em um socket em escuta, Recv-Q é o número de conexões acumuladas na fila e Send-Q é o tamanho máximo da fila. Esses significados vêm da página man netstat(8) do net-tools.
2️⃣ Verificar portas no Linux (-tln, -uln, -tulpn)
A saída sem opções não mostra as portas que esperam conexões, então, para verificar as portas abertas, adicione -l, que seleciona só os sockets em escuta. [ss -tln] mostra as portas TCP em escuta como números.
ss -tlnState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*Se o Local Address for 0.0.0.0, o socket aceita conexões que chegam em qualquer endereço IPv4 do servidor; se for 127.0.0.1, só é possível conectar de dentro do servidor. [::] significa todos os endereços IPv6, então as portas 22, 80 e 443 estão abertas tanto em IPv4 quanto em IPv6.
Sem -n, os números de porta viram nomes de serviço. A porta 8080 aparece como http-alt.
ss -tlState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 511 0.0.0.0:http 0.0.0.0:*
LISTEN 0 511 0.0.0.0:https 0.0.0.0:*
LISTEN 0 511 127.0.0.1:http-alt 0.0.0.0:*
LISTEN 0 128 [::]:ssh [::]:*
LISTEN 0 511 [::]:http [::]:*
LISTEN 0 511 [::]:https [::]:*O UDP não estabelece conexões, então nem os sockets em escuta têm o estado LISTEN. Na saída de [ss -uln], a coluna de estado mostrava UNCONN em todas as linhas. A porta 68 (bootpc) é o cliente DHCP e a porta 123 (ntp) é a de sincronização de horário.
ss -ulnState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
UNCONN 0 0 203.0.113.10:123 0.0.0.0:*
UNCONN 0 0 127.0.0.1:123 0.0.0.0:*
UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
UNCONN 0 0 [::1]:123 [::]:*
UNCONN 0 0 [::]:123 [::]:*Para ver TCP e UDP de uma vez, junte as opções como em [ss -tulpn]. Quando há mais de um tipo, uma coluna Netid é adicionada no início.
ss -tulpnNetid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
udp UNCONN 0 0 203.0.113.10:123 0.0.0.0:*
udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
udp UNCONN 0 0 [::1]:123 [::]:*
udp UNCONN 0 0 [::]:123 [::]:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
tcp LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 511 [::]:80 [::]:*
tcp LISTEN 0 511 [::]:443 [::]:*3️⃣ Verificar processos com o comando ss (-p)
-p é a opção que mostra na coluna Process o programa que usa cada socket. Porém, ao executar [ss -tlnp] em uma conta comum do servidor de teste, a coluna Process ficou vazia, como abaixo, como se a opção não tivesse efeito.
ss -tlnpState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*O ss encontra o processo que usa um socket lendo a pasta fd de cada processo em /proc. Uma conta comum não consegue abrir a pasta fd de um processo iniciado por outra conta, então o nome desse programa não entra na coluna. Se você abrir, em uma conta comum, a pasta do processo 1, iniciado pelo root, recebe um erro de permissão.
ls /proc/1/fdls: cannot open directory '/proc/1/fd': Permission deniedOs programas iniciados com a sua própria conta aparecem na coluna Process mesmo em uma conta comum. Confirmamos isso iniciando o servidor web simples do python3 na porta 8000 de 127.0.0.1.
python3 -m http.server 8000 --bind 127.0.0.1 &Depois de iniciá-lo, adicione [sport = :8000] para consultar só a linha da porta 8000.
ss -tlnp sport = :8000State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 5 127.0.0.1:8000 0.0.0.0:* users:(("python3",pid=343015,fd=3))Nos parênteses depois de users aparecem, nesta ordem, o nome do programa, o pid e o número do descritor de arquivo (fd).
Depois da verificação, encerre o servidor web simples com [kill %1]. Se você executar [ss -tln sport = :8000] de novo depois disso, só sobra a linha de cabeçalho e a linha da porta 8000 não aparece mais.
Na conta root, o ss consegue ler as informações de todos os processos, então a coluna Process é preenchida. Quando vários processos escutam juntos na mesma porta, os parênteses de users trazem uma entrada para cada um. Os nomes de programa e os pid da saída do root abaixo são valores de exemplo.
ss -tlnp sport = :443State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("app",pid=2101,fd=6),("app",pid=2100,fd=6))
LISTEN 0 511 [::]:443 [::]:* users:(("app",pid=2101,fd=7),("app",pid=2100,fd=7))Para encontrar um programa pelo número da porta, você também pode usar o comando lsof na forma [lsof -i :443].
No diagrama abaixo, você pode trocar de conta para comparar como a coluna Process muda conforme a conta.
4️⃣ Opções de filtro de estado e porta do ss
Mesmo depois de verificar as portas abertas, você ainda precisa filtrar à parte quem está conectado a elas agora. O ss deixa só as linhas que você quer quando você adiciona condições de filtro depois das opções.
Se você escrever o nome de um estado depois de state, só ficam os sockets nesse estado. A saída de [ss -tn state established] não tem a coluna State e começa pela coluna Recv-Q.
ss -tn state establishedRecv-Q Send-Q Local Address:Port Peer Address:Port Process
0 0 203.0.113.10:22 198.51.100.7:51114
0 0 203.0.113.10:26676 192.0.2.15:443
0 0 203.0.113.10:29714 192.0.2.16:443As portas são filtradas com dport (porta da outra ponta) e sport (porta do seu lado). As conexões que saem do servidor para servidores https externos são selecionadas com [dport = :443].
ss -tn dport = :443State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
ESTAB 0 0 203.0.113.10:26676 192.0.2.15:443
ESTAB 0 0 203.0.113.10:29714 192.0.2.16:443Usando sport junto com -l, você verifica só se aquela porta está em escuta.
ss -tln sport = :22State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*Agrupe várias condições com parênteses e or, e coloque-as entre aspas simples para que o shell não interprete os parênteses antes. Abaixo está o resultado de selecionar só as conexões ssh, seguindo o exemplo da página man.
ss -tn state established '( dport = :ssh or sport = :ssh )'Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 0 203.0.113.10:22 198.51.100.7:51114TIME-WAIT é o estado em que uma conexão fica por um tempo depois de encerrada. Ele não aparece na saída padrão, então só dá para vê-lo selecionando à parte com [state time-wait].
ss -tn state time-waitRecv-Q Send-Q Local Address:Port Peer Address:PortProcess
0 0 127.0.0.1:28750 127.0.0.1:80
0 0 127.0.0.1:57698 127.0.0.1:8080
0 0 [::1]:31936 [::1]:80Se você errar o nome do estado, o comando termina na hora deixando só uma linha de erro [wrong state name]. Abaixo está o resultado de digitar foo de propósito. Os nomes que você pode usar aparecem na linha TCP-STATES da saída de [ss -h].
ss -tn state fooss: wrong state name: foo📌 Principais opções: resultados deste artigo
| Opção | Tarefa | Resultado neste artigo | |
|---|---|---|---|
| -t | Mostra só sockets TCP | Os sockets Unix somem e, no lugar da porta, aparecem nomes de serviço como ssh e https | |
| -n | Mostra números de porta em vez de nomes de serviço | No ss -tn, ssh aparece como 22 e https como 443 | |
| -l | Mostra só sockets em escuta (LISTEN) | O ss -tln mostra portas em escuta como 22, 80 e 443 | |
| -u | Mostra só sockets UDP | A coluna de estado do ss -uln é UNCONN em todas as linhas | |
| -p | Mostra na coluna Process o programa que usa cada socket | Em uma conta comum, só o python3 iniciado pela minha conta mostra nome e pid; os programas de outras contas ficam em branco | |
| -s | Resume a quantidade por tipo em vez de listar os sockets | O estab 9 da linha TCP bate com as 9 linhas da saída de state established sem o cabeçalho | |
| -4 | Mostra só sockets IPv4 | No ss -t4ln, somem as linhas que começam com [::] | |
| -6 | Mostra só sockets IPv6 | No ss -t6ln, somem as linhas que começam com 0.0.0.0 e 127.0.0.1 | |
| -H | Mostra só as linhas de sockets, sem cabeçalho | A contagem de linhas de ss -H -tln | wc -l não inclui o cabeçalho | |
| state ESTADO | Deixa só os sockets nesse estado | A saída de state established começa pelo Recv-Q sem a coluna State; um nome inexistente dá [wrong state name: foo] | |
| dport = :PORTA | Filtra pela porta da outra ponta | dport = :443 mostra duas linhas de conexões que saem para servidores https externos | |
| sport = :PORTA | Filtra pela porta do seu lado | sport = :22 junto com -l mostra duas linhas em escuta da porta 22, IPv4 e IPv6 | |
| src ENDEREÇO | Deixa só os sockets desse endereço | O ss -tln src 127.0.0.1 mostra só as portas de 127.0.0.1, que aceitam conexões apenas de dentro do servidor |
📎 Outras opções: segundo o manual oficial
| Opção | Tarefa | |
|---|---|---|
| -a, --all | Mostra juntos os sockets em escuta e os conectados | |
| -r, --resolve | Resolve endereços e números de porta em nomes | |
| -e, --extended | Mostra informações detalhadas de cada socket, como uid e inode | |
| -o, --options | Mostra informações de temporizadores, como a retransmissão TCP e o keepalive | |
| -m, --memory | Mostra a memória usada por cada socket | |
| -i, --info | Mostra informações internas do TCP (rtt, cwnd etc.) | |
| -x, --unix | Mostra só sockets de domínio Unix | |
| -w, --raw | Mostra só sockets RAW | |
| -f FAMÍLIA | Seleciona pela família de socket, como unix, inet, inet6, link ou netlink | |
| -Q, --no-queues | Mostra a saída sem as colunas Recv-Q e Send-Q | |
| -K, --kill | Fecha à força os sockets que batem com o filtro; os que o kernel não suporta são ignorados | |
| -E, --events | Continua mostrando os sockets à medida que são fechados | |
| -V, --version | Mostra as informações de versão |
🔲 Simulador do comando ss
No simulador abaixo, você pode digitar as opções e os filtros vistos até aqui e comparar a saída com a do [netstat -tln].
5️⃣ Resumo de sockets do ss (-s)
O -s mostra um resumo da quantidade por tipo em vez da lista de sockets. Segundo a página man, ele não conta a lista um por um, mas reúne os números de várias estatísticas.
ss -sTotal: 340
TCP: 48 (estab 9, closed 15, orphaned 0, timewait 13)
Transport Total IP IPv6
RAW 0 0 0
UDP 8 4 4
TCP 33 25 8
INET 41 29 12
FRAG 0 0 0O estab da linha TCP é o número de conexões estabelecidas neste momento. Por isso, dá para compará-lo com o número de linhas mostradas por [state established] no mesmo instante.
ss -tn state established | wc -l10Tirando a linha de cabeçalho das 10 linhas da saída, sobram 9, o mesmo valor do estab 9 do -s. O timewait 13 é o número de sockets TIME-WAIT, que só apareciam ao selecioná-los com [state time-wait].
6️⃣ Comando ss comparado com o netstat
netstat vem no pacote net-tools, cuja página man descreve o netstat como um programa praticamente em desuso (mostly obsolete) e orienta a usar o ss no lugar dele. Porém, scripts escritos para o formato de saída do netstat não conseguem ler a saída do ss do jeito que está, porque a ordem das colunas e a notação dos endereços são diferentes.
Ao mostrar as portas TCP em escuta do mesmo servidor com os dois comandos, o netstat colocou o estado no final e escreveu os endereços IPv6 como :::22.
netstat -tlnActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::443 :::* LISTENNo ss, o estado vem no início e os endereços IPv6 ficam entre colchetes, como [::]:22.
ss -tlnState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*As opções mais usadas do netstat correspondem aos seguintes comandos ss e ip.
| netstat | Comando substituto / o que mostra |
|---|---|
| netstat -tln | ss -tlnPortas TCP em escuta, como números |
| netstat -tulpn | ss -tulpnPortas TCP e UDP em escuta e seus programas |
| netstat -tan | ss -tanTodos os sockets TCP, como números |
| netstat -r | ip routeTabela de roteamento |
| netstat -i | ip -s linkEstatísticas das interfaces de rede |
🔢 FAQ & conteúdo recomendado











ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.