TSPU Checker: Como Criei uma Ferramenta para Diagnóstico de Bloqueios
A ideia para este projeto surgiu da necessidade de entender por que, em alguns provedores, a VPN funcionava normalmente, enquanto em outros, a conexão era interrompida ou simplesmente travava sem erros aparentes. Testes comuns com ping quase não revelavam nada: ICMP passava, mas TCP podia falhar.
A certa altura, ficou claro que era preciso uma ferramenta simples, que pudesse ser executada rapidamente em um servidor, no WSL ou até mesmo no Termux, para entender em poucos minutos onde estava o problema – DNS, TCP, TLS ou HTTP.
Assim nasceu o TSPU Checker – um script bash para diagnosticar bloqueios e analisar o funcionamento do TSPU em redes russas. O script é capaz de verificar a disponibilidade de portas, determinar sinais de filtragem SNI, comparar respostas DNS e procurar sintomas típicos de DPI.
O código está disponível no GitHub sob a licença MIT, para que qualquer pessoa possa facilmente aprimorá-lo para suas próprias tarefas.
Por que tive que escrever minha própria ferramenta
A partir de 2025, os operadores russos começaram a mostrar cada vez mais sinais de trabalho no modelo allowlist – quando o acesso é permitido apenas a determinados endereços IP, e o restante do tráfego é descartado ou começa a se comportar de forma instável.
Na prática, isso parecia estranho: eu me conectava a uma VPN, mas o tráfego não passava, o ping para o servidor passava, mas o TCP não. Ao mesmo tempo, o DNS respondia normalmente, mas a conexão TLS de repente travava. Alguns servidores em nuvem começaram a falhar parcialmente. Às vezes, não era claro onde exatamente a conexão estava quebrando.
Eu li sobre várias soluções existentes, como OONI Probe e rkn-block-checker, mas para diagnósticos diários, elas pareciam muito pesadas ou não muito convenientes. Eu queria algo o mais simples possível: executei o script e, em 30 segundos, entendi o que exatamente o provedor estava cortando. Assim nasceu o TSPU Checker.
Arquitetura e Abordagem
O script foi escrito em bash. No início, pensei em fazer tudo em Python, mas então ficou claro que eu não o conhecia absolutamente nada:). No console, ele não exige muitos recursos, o que significa que pode ser executado mesmo em um servidor VPS mínimo. Acontece que, para diagnósticos de rede, as ferramentas padrão são mais do que suficientes.
E então chegou o fim de semana, tive um tempo livre, comecei a testar o script. Tenho o Linux instalado no meu computador doméstico e também tenho um servidor VPS, onde comecei meus testes. Então pensei que seria bom escrever um mini script para executá-lo no meu telefone no Termux.
Para que o script fosse facilmente executado na maioria das máquinas com Linux, decidi usar utilitários padrão como ping, nc, curl, openssl, dig, hping3, nmap. Toda a ideia do script é verificar consistentemente vários níveis de rede e entender onde o problema começa.
Por exemplo:
a. ICMP ajuda a entender se o servidor está vivo; b. TCP mostra se a conexão está sendo cortada; c. TLS permite ver sinais de filtragem SNI; d. HTTP ajuda a detectar stubs; e. a comparação de DNS e DoH mostra uma possível substituição de respostas.
========================================
Ferramenta de Diagnóstico TSPU
v1.0
========================================
Servidor alvo atual: 192.168.1.1
Selecione uma ação:
0) Alterar o IP do servidor (agora: 192.168.1.1)
1) Determinar o modo TSPU
2) Verificar a atividade TSPU (curl)
3) Verificar a disponibilidade de portas (TCP)
4) Verificar a filtragem SNI (L7)
5) Verificar portas UDP
6) Verificar DNS externo
7) Iniciar um servidor web na porta 443
8) Verificação completa do servidor
9) Análise detalhada de portas
10) Determinar seu IP
11) Diagnóstico avançado de bloqueios
12) Verificar Split DNS/vazamento
q) Sair
Sua escolha:
Eu queria tornar o menu o mais simples possível, para que a ferramenta pudesse ser usada mesmo sem documentação. Acho que um dos modos mais úteis é a verificação avançada de bloqueios.
O script segue as etapas:
Verifica DNS;
- Tenta abrir uma conexão TCP;
- Faz um handshake TLS;
- Verifica a resposta HTTP.
Eu acho que essa abordagem ajuda a localizar o problema com bastante rapidez. Quando, por exemplo, o DNS responde normalmente, mas o TCP não se conecta, ou o TCP está presente, mas o TLS trava. E às vezes o TLS passa, mas o HTTP retorna um stub.
Exemplo:
=======================================
Ferramenta de Diagnóstico TSPU
v1.0
========================================
Servidor alvo atual: 192.168.1.1
[11] Diagnóstico avançado de bloqueios (4 camadas)
--- Lista branca (grupo de controle) ---
Verificação: Yandex (ya.ru)
DNS do sistema: OK → 5.255.255.242
DNS DoH (1.1.1.1): OK → 77.88.44.242
Porta TCP 443: ABERTA
--- Lista negra (recursos bloqueados) ---
Verificação: Twitter (twitter.com)
DNS do sistema: OK → 172.66.0.227
DNS DoH (1.1.1.1): OK → 162.159.140.229
Porta TCP 443: ABERTA
Handshake TLS: SUCESSO
Pressione Enter para continuar...
Se você estudar cuidadosamente as informações recebidas, ficará claro onde o DPI começa a interferir.
Durante o teste, notei vários casos estranhos em que a conexão TLS funcionava apenas com um determinado SNI. Então pensei nessa verificação. Pensei que o script poderia estabelecer uma conexão TLS com diferentes domínios e mostrar o resultado.
Exemplo:
========================================
Ferramenta de Diagnóstico TSPU
v4.2
========================================
Servidor alvo atual: 192.168.1.1
[4] Verificando a filtragem SNI em L7...
IP de teste (Yandex): 77.88.55.242
SNI: ya.ru (Yandex): PASSADO ✓
SNI: google.com (Google): PASSADO ✓
SNI: twitter.com (Twitter): SEM RESPOSTA
SNI: youtube.com (YouTube): PASSADO ✓
SNI: vk.com (VK): PASSADO ✓
Pressione Enter para continuar...
Após os testes, ficou claro que em algumas redes isso permite entender rapidamente se o TLS está sendo filtrado pelo nome do host.
Para testar a VPN, foi necessário verificar qual IP diferentes serviços veem e se o endereço real está vazando além do túnel.
========================================
Ferramenta de Diagnóstico TSPU
v1.0
========================================
Servidor alvo atual: 192.168.1.1
[12] Verificar Split DNS/vazamento WebRTC
ATENÇÃO: Execute este teste COM a VPN LIGADA
Pressione Enter se a VPN estiver ligada, ou 'q' para sair:
[Verificação de qual IP os sites veem]:
ya.ru vê IP: 77.88.44.242
ifconfig.me vê IP: 144.31.198.40
Análise:
Split DNS/tunelamento FUNCIONA
Pressione Enter para continuar...
No início, eu queria adicionar uma verificação WebRTC completa, mas para bash isso já era muito inconveniente.
O que aconteceu na prática
Teste VPS dentro da Federação Russa
Para testes, usei um VPS normal. Os resultados foram mais ou menos assim:
| Verificação | Resultado |
|---|---|
| ICMP (ping) | DISPONÍVEL |
| TCP 22 (SSH) | ABERTO |
| TCP 443 (VLESS) | ABERTO |
| UDP 8443 (Hysteria) | SEM RESPOSTA |
| DNS Spoofing | Não detectado |
| SNI Filtering | Não detectado |
Nesse caso, o servidor respondeu normalmente e não houve sinais de bloqueio.
Verificação através de uma operadora de celular
Mas a rede móvel já mostrou um comportamento mais interessante. A seguinte imagem foi observada:
| Verificação | Resultado |
|---|---|
| ICMP para IP bloqueado | DISPONÍVEL |
| TCP para IP bloqueado | TEMPO LIMITE |
| DNS externo (8.8.8.8) | NÃO DISPONÍVEL |
| Modo TSPU | Semelhante a allowlist |
Ou seja, o ping ainda passava, mas uma conexão TCP normal já não era estabelecida.
Com o DNS também foi interessante: parte dos resolvedores externos simplesmente parou de responder.
Instalação e execução
No Linux / WSL
bash# Instalar dependências sudo apt update sudo apt install -y hping3 nmap netcat-openbsd openssl dnsutils curl # Baixar o script wget -O tspu_check.sh https://raw.githubusercontent.com/ku78/tspu-checker/refs/heads/main/tspu_check.sh # Executar chmod +x tspu_checker.sh sudo ./tspu_checker.sh
No Android (Termux)
bashpkg update && pkg install -y openssl-tool netcat-openbsd curl tsu nano # Em seguida, copie o script para um arquivo e execute-o
No Windows (PowerShell)
O trabalho completo só é possível via WSL. Uma versão simplificada no PowerShell está disponível no repositório.
Planos para desenvolvimento
- Adicionar uma verificação ECH (Encrypted Client Hello)
- Implementar benchmarks de velocidade para diferentes protocolos
Links e agradecimentos
- Link para o GitHub
Inspiração:
- Artigo de zarazaexe "Tudo o que você precisa saber sobre listas brancas: como elas são organizadas e 6 maneiras de contorná-las"
Ideias de diagnóstico:
- Projeto rkn-block-checker de MayersScott
O TSPU Checker foi originalmente feito como um pequeno script auxiliar "para mim", para não ter que descobrir manualmente toda vez por que a próxima VPN parou de funcionar de repente.
No final, acabou sendo uma ferramenta bastante conveniente que ajuda a entender rapidamente:
- se o DNS está quebrando
- se o TCP está sendo cortado
- se há sinais de filtragem SNI
- se as respostas estão sendo substituídas
- se o tunelamento está funcionando
É claro que este não é um sistema completo de análise DPI, mas para um diagnóstico rápido, o script geralmente é suficiente.
PS: Este é meu primeiro artigo, estou esperando o máximo de ódio possível.








