Comando ss: verificar portas e processos no Linux, comparado com o netstat

Ambiente de testeFamília DebianDebian 12iproute2 6.1.0conta de usuário comumVerificado em 2026-11-04
Comandos de redessLocalização/usr/bin/ss

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 5
Netid 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              * 46066199

Por 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 -t
State 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:https

Se você adicionar também -n, os números de porta aparecem como estão, sem virar nomes de serviço.

ss -tn
State 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:443

As 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 -tln
State  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 -tl
State  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 -uln
State  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 -tulpn
Netid 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 -tlnp
State  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/fd
ls: cannot open directory '/proc/1/fd': Permission denied

Os 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 = :8000
State  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 = :443
State  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.

🧭 ss -p e as contas: quando a coluna Process é preenchida
Diagrama explicativo
👤 Conta
$# ss -tlnp
Socket em escutaInformações do processoColuna Process
0.0.0.0:22LISTEN
➜
/proc/812/fdDono: root
➜
Processos de outras contas: não legíveisroot: lê todos os processosColuna Process vaziausers:(("sshd",pid=812,fd=3))
127.0.0.1:8080LISTEN
➜
/proc/2100/fdDono: root
➜
Processos de outras contas: não legíveisroot: lê todos os processosColuna Process vaziausers:(("app",pid=2100,fd=3))
127.0.0.1:8000LISTEN
➜
/proc/343015/fdDono: user
➜
Processos da minha conta: legíveisroot: lê todos os processosusers:(("python3",pid=343015,fd=3))
Uma conta comum não consegue ler as informações de /proc dos processos iniciados por outras contas, então a coluna Process dessas linhas fica vazia e só a linha do python3 iniciado com a sua própria conta é preenchida.
O root consegue ler as informações de todos os processos, então o nome do programa e o pid de cada socket em escuta aparecem na coluna Process.

4️⃣ Opções de filtro de estado e porta do ss

  • ↪️ state, dport, sport

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 established
Recv-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:443

As 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 = :443
State 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:443

Usando sport junto com -l, você verifica só se aquela porta está em escuta.

ss -tln sport = :22
State  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:51114

TIME-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-wait
Recv-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]:80

Se 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 foo
ss: wrong state name: foo

📌 Principais opções: resultados deste artigo

OpçãoTarefaResultado neste artigo
-tMostra só sockets TCPOs sockets Unix somem e, no lugar da porta, aparecem nomes de serviço como ssh e https
-nMostra números de porta em vez de nomes de serviçoNo ss -tn, ssh aparece como 22 e https como 443
-lMostra só sockets em escuta (LISTEN)O ss -tln mostra portas em escuta como 22, 80 e 443
-uMostra só sockets UDPA coluna de estado do ss -uln é UNCONN em todas as linhas
-pMostra na coluna Process o programa que usa cada socketEm uma conta comum, só o python3 iniciado pela minha conta mostra nome e pid; os programas de outras contas ficam em branco
-sResume a quantidade por tipo em vez de listar os socketsO estab 9 da linha TCP bate com as 9 linhas da saída de state established sem o cabeçalho
-4Mostra só sockets IPv4No ss -t4ln, somem as linhas que começam com [::]
-6Mostra só sockets IPv6No ss -t6ln, somem as linhas que começam com 0.0.0.0 e 127.0.0.1
-HMostra só as linhas de sockets, sem cabeçalhoA contagem de linhas de ss -H -tln | wc -l não inclui o cabeçalho
state ESTADODeixa só os sockets nesse estadoA saída de state established começa pelo Recv-Q sem a coluna State; um nome inexistente dá [wrong state name: foo]
dport = :PORTAFiltra pela porta da outra pontadport = :443 mostra duas linhas de conexões que saem para servidores https externos
sport = :PORTAFiltra pela porta do seu ladosport = :22 junto com -l mostra duas linhas em escuta da porta 22, IPv4 e IPv6
src ENDEREÇODeixa só os sockets desse endereçoO 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çãoTarefa
-a, --allMostra juntos os sockets em escuta e os conectados
-r, --resolveResolve endereços e números de porta em nomes
-e, --extendedMostra informações detalhadas de cada socket, como uid e inode
-o, --optionsMostra informações de temporizadores, como a retransmissão TCP e o keepalive
-m, --memoryMostra a memória usada por cada socket
-i, --infoMostra informações internas do TCP (rtt, cwnd etc.)
-x, --unixMostra só sockets de domínio Unix
-w, --rawMostra só sockets RAW
-f FAMÍLIASeleciona pela família de socket, como unix, inet, inet6, link ou netlink
-Q, --no-queuesMostra a saída sem as colunas Recv-Q e Send-Q
-K, --killFecha à força os sockets que batem com o filtro; os que o kernel não suporta são ignorados
-E, --eventsContinua mostrando os sockets à medida que são fechados
-V, --versionMostra 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].

Simulador do comando ssiproute2 6.1.0
[root@server work]#
É uma tela de conta comum (user) que funciona só no navegador; com ↑↓ você recupera os comandos digitados antes.

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 -s
Total: 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         0

O 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 -l
10

Tirando 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 -tln
Active 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                  :::*                    LISTEN

No ss, o estado vem no início e os endereços IPv6 ficam entre colchetes, como [::]:22.

ss -tln
State  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.

netstatComando substituto / o que mostra
netstat -tlnss -tlnPortas TCP em escuta, como números
netstat -tulpnss -tulpnPortas TCP e UDP em escuta e seus programas
netstat -tanss -tanTodos os sockets TCP, como números
netstat -rip routeTabela de roteamento
netstat -iip -s linkEstatísticas das interfaces de rede
Os comandos ip que substituem netstat -r e netstat -i estão na seção NOTES da página man netstat(8) do net-tools.

🔢 FAQ & conteúdo recomendado

Com -4 ficam só os sockets IPv4 e com -6, só os IPv6. No [ss -t4ln] sumiram as linhas que começam com [::], e no [ss -t6ln], as que começam com 0.0.0.0 e 127.0.0.1.

Se você escrever um endereço depois de src, ficam só os sockets em escuta desse endereço. O [ss -tln src 127.0.0.1] mostrou só as portas de 127.0.0.1, que não aceitam conexões de fora do servidor.

Com -H aparecem só as linhas de sockets, sem cabeçalho. Ao contar linhas, como em [ss -H -tln | wc -l], a linha de cabeçalho não entra na contagem.

🧭 Conteúdo recomendado sobre comandos de rede 13 artigos · 3 referências
🗂️ Comandos de rede
📄 Comando ip 📄 Comandos netstat · ifconfig 📄 Comando nmtui 📄 Comando ss
📄 Comando SSH 📄 Comando rsync 📄 Comando wget 📄 Comandos rz · sz
📄 Comando host 📄 Comando nslookup
📄 Comando iptables 📄 Comando firewall-cmd 📄 Comando certbot

ℹ️ 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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 6   +   9   =