Pular para o conteúdo
Matheus Amorim

2025

DNS Manager

Utilitário de linha de comando para Windows que aplica ou restaura o DNS nas interfaces conectadas e liga ou desliga IPv4 e IPv6 em todos os adaptadores, nascido de uma demanda real de trabalho.

  • Python
  • CLI
  • Windows
  • PowerShell
  • PyInstaller
  • Redes

Contexto

Precisava alternar rapidamente entre configurações de DNS para estabelecer conexão com um Pi-hole rodando em VM, usado como filtro de DNS da operação. Fazer isso pela interface do Windows a cada troca é lento e propenso a erro — especialmente porque envolve IPv4 e IPv6 ao mesmo tempo, em telas separadas.

O DNS Manager é a resposta: um menu interativo em Python que detecta as interfaces de rede conectadas, aplica a operação escolhida de uma vez e registra cada passo em um arquivo de log. Foi pensado para técnicos e equipes de suporte que precisam trocar o DNS de várias máquinas com rapidez, sem depender das telas de configuração do Windows.

Decisões técnicas

CLI, não interface gráfica. A operação é troca de configuração, não exploração. Um comando resolve o que a interface do Windows resolve em seis cliques distribuídos por três janelas — e um comando pode ser roteirizado depois, o que uma GUI não pode. O menu tem oito opções: aplicar um DNS personalizado, restaurar o DNS automático (DHCP), ativar ou desativar o IPv4 e o IPv6, ver o log e sair.

Encapsular o netsh e o PowerShell, não reinventá-los. O programa executa netsh interface show interface e considera conectadas as linhas que contêm "Conectado" ou "Connected", então funciona em Windows em português e em inglês. O DNS é aplicado com netsh interface ip set dns em cada interface conectada, e a restauração usa source=dhcp. IPv4 e IPv6 são ligados e desligados pelos cmdlets Enable-NetAdapterBinding e Disable-NetAdapterBinding, em todos os adaptadores — por isso o requisito de Windows 8 ou superior, onde esses cmdlets existem.

Validar e confirmar antes de mudar o que é deliberado. Aplicar um DNS personalizado e restaurar o DHCP pedem confirmação, e o formato do IP é validado antes de qualquer alteração. Ligar e desligar IPv4 e IPv6 executa na hora.

Administrador obrigatório, checado na entrada. A verificação usa IsUserAnAdmin da shell32; sem privilégio, o programa encerra.

Empacotamento com PyInstaller. O objetivo era rodar em qualquer máquina Windows da operação sem depender da versão do sistema nem de ter Python instalado. O build.bat limpa build/ e dist/, roda o PyInstaller com o DNSManager.spec e gera um DNSManager.exe de arquivo único, com console, ícone próprio e o .env embutido. Para distribuir, copia-se só o executável.

Testes sem tocar na máquina. A suíte usa o unittest da biblioteca padrão e simula os comandos de rede, então roda sem privilégio de administrador e não altera a configuração de quem testa.

Resultado

Ferramenta empacotada como executável, em uso real no trabalho. Estrutura modular — menu, privilégios, interfaces, DNS, IPv4, IPv6 e log em módulos separados — com build automatizado por script e toda mensagem do console gravada, com data e hora, no arquivo de log.

As limitações estão documentadas no README, não escondidas: não há seleção individual de interface, só um DNS primário IPv4 é configurado, restaurar significa forçar DHCP e não voltar à configuração anterior, e desabilitar o IPv4 derruba a conectividade sem pedir confirmação.

Aprendizados

Automação nasce de irritação repetida. A ferramenta existe porque a mesma sequência de cliques aconteceu vezes suficientes para valer uma tarde de código — e esse é o critério que uso desde então para decidir o que automatizar.