01 A lista escrita à mão
superfície de ataque
Este foi o primeiro programa do projeto. Dezoito linhas, escritas para responder aquela pergunta — e ele funciona:
import socket
alvo = "127.0.0.1"
portas = [21, 22, 80, 443, 5432]
for porta in portas:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(0.5)
codigo_retorno = s.connect_ex((alvo, porta))
if codigo_retorno == 0:
print(f"Alvo: {alvo} | Porta {porta}: [ ABERTA ]")
else:
print(f"Alvo: {alvo} | Porta {porta}: [ FECHADA ]")
s.close()
O erro não está em nenhuma linha. Está na linha 4:
portas = [21, 22, 80, 443, 5432]
Essa lista foi escrita à mão. Ela só contém as portas em que alguém já tinha pensado.
Porta aberta é um programa esperando conexão. É uma janela: alguém do lado de fora pode bater. Se o programa que atende tiver um defeito, é por ali que se entra.
Um scanner de lista fixa responde "as cinco que você perguntou estão assim". Mas a porta que derruba uma máquina é quase sempre a que o dono não sabia que existia — aberta por um programa que ele instalou e esqueceu.
E tem uma diferença que decide tudo, escrita no endereço:
- 127.0.0.1:5432Só a própria máquina alcança. É uma porta para dentro de casa — o Postgres, aqui, está assim.
- 0.0.0.0:8777Qualquer aparelho na mesma rede alcança. O
0.0.0.0quer dizer "por todas as entradas". É porta para a rua.
O mesmo programa, o mesmo código, com uma diferença de endereço — e um está disponível para a casa inteira do vizinho.
Não adivinhe a lista. O sistema já tem ela inteira e responde na hora:
ss -tulpn | grep LISTEN
Lê-se: mostre os soquetes tcp e udp que estão
escutando (l), com o programa dono de cada um e o
número da porta sem traduzir para nome.
Decore este comando. Rode de novo toda vez que instalar qualquer coisa — é aí que aparecem as janelas que você não abriu de propósito.
O scanner de lista fixa, rodando de verdade. Cinco portas perguntadas, uma aberta:
$ python3 neon_core.py
Alvo: 127.0.0.1 | Porta 21: [ FECHADA ]
Alvo: 127.0.0.1 | Porta 22: [ FECHADA ]
Alvo: 127.0.0.1 | Porta 80: [ FECHADA ]
Alvo: 127.0.0.1 | Porta 443: [ FECHADA ]
Alvo: 127.0.0.1 | Porta 5432: [ ABERTA ]
Conclusão do scanner: uma janela aberta. Agora a mesma máquina, no mesmo dia, perguntando para o sistema em vez de adivinhar:
$ ss -tulpn | grep -c LISTEN
20
Vinte. O scanner tinha achado uma. Ele não errou — ele respondeu exatamente o que foi perguntado. A lista curta era a pergunta curta.
Das vinte, dezenove estavam em 127.0.0.1, portas para
dentro. Uma estava em 0.0.0.0, porta para a rua — e era um
programa do próprio dono, ligado com uma opção --rede que ele
mesmo digitou, semanas antes, para abrir o painel pelo celular.
Não era invasão. Era uma escolha antiga que ninguém tinha revisto.
o scanner das 18 linhas existe hoje só na captura de tela de 4 de setembro de 2026, 10:06 — foi reescrito no mesmo arquivo no dia seguinte. A saída acima é a da captura das 10:00.