Um script Python para enumerar endereços IP de uma lista de subdomínios com opções totalmente configuráveis via linha de comando.
- ✅ Resolução de IPs para múltiplos subdomínios simultaneamente
- ✅ Suporte a IPv4 e IPv6
- ✅ Entrada via arquivo, argumento de linha de comando ou stdin
- ✅ Saídas em formato texto, JSON ou CSV
- ✅ Processamento concorrente com threads configuráveis
- ✅ Tratamento de erros e timeouts personalizáveis
- ✅ Relatório de progresso e estatísticas
- Python 3.6 ou superior
- Nenhuma dependência externa (usa apenas bibliotecas padrão)
- Clone ou baixe o repositório
- Torne o script executável:
chmod +x subips.py
python3 subips.py [opções]python3 subips.py --input-file subdominios.txtpython3 subips.py --subdomains "subdominio1.com.br
subdominio2.com.br
subdominio3.com.br"cat subdominios.txt | python3 subips.py
# ou
echo -e "sub1.com\nsub2.com" | python3 subips.py| Opção | Descrição | Padrão |
|---|---|---|
-f, --input-file ARQUIVO |
Arquivo contendo subdomínios (um por linha) | - |
-s, --subdomains TEXTO |
Lista de subdomínios separados por nova linha | - |
-o, --output-file ARQUIVO |
Arquivo de saída (padrão: stdout) | stdout |
-F, --output-format {text,json,csv} |
Formato de saída | text |
-t, --timeout SEGUNDOS |
Timeout para resolução DNS (segundos) | 5 |
-T, --threads NÚMERO |
Número de threads concorrentes | 10 |
-6, --ipv6 |
Incluir endereços IPv6 | false |
-v, --verbose |
Mostrar progresso e erros | false |
-h, --help |
Mostrar ajuda | - |
python3 subips.py --subdomains "google.com
github.com
example.com" --verboseSaída:
Processing 3 subdomains...
[github.com] Resolved 1 IPs
[google.com] Resolved 1 IPs
[example.com] Resolved 6 IPs
example.com: 23.215.0.138, 23.220.75.232, 23.220.75.245, 23.192.228.80, 23.192.228.84, 23.215.0.136
github.com: 4.228.31.150
google.com: 172.217.172.174
Elapsed time: 5.04s
Successful resolutions: 3, Errors: 0
python3 subips.py --subdomains "google.com
github.com" --output-format jsonSaída:
{
"github.com": {
"ips": [
"4.228.31.150"
]
},
"google.com": {
"ips": [
"172.217.172.174"
]
}
}python3 subips.py --subdomains "google.com
github.com" --output-format csvSaída:
domain,ips,error
github.com,"4.228.31.150",
google.com,"172.217.172.174",
python3 subips.py --subdomains "google.com" --ipv6 --verbose# Criar arquivo de subdomínios
echo -e "sub1.exemplo.com\nsub2.exemplo.com\nsub3.exemplo.com" > subdominios.txt
# Processar com configurações otimizadas
python3 subips.py --input-file subdominios.txt --output-file resultados.json --output-format json --threads 20 --timeout 10 --verbose#!/bin/bash
# Exemplo de uso em script shell
SUBDOMINIOS="api.exemplo.com
www.exemplo.com
dev.exemplo.com"
python3 subips.py --subdomains "$SUBDOMINIOS" --output-format json --output-file ips.json
echo "IPs resolvidos salvos em ips.json"dominio.com: 192.168.1.1, 192.168.1.2
outro.com: 10.0.0.1
erro.com: ERROR - DNS resolution failed: [Errno 11001] getaddrinfo failed
{
"dominio.com": {
"ips": ["192.168.1.1", "192.168.1.2"]
},
"erro.com": {
"error": "DNS resolution failed: [Errno 11001] getaddrinfo failed"
}
}domain,ips,error
dominio.com,"192.168.1.1;192.168.1.2",
erro.com,,"DNS resolution failed: [Errno 11001] getaddrinfo failed"
O script trata diversos tipos de erro:
- Domínios inexistentes: Mostra mensagem de erro DNS
- Timeouts: Usa timeout configurável para evitar travamentos
- Conexões lentas: Processamento concorrente evita bloqueios
- Arquivos inválidos: Validação de entrada e mensagens claras
- Processamento Concorrente: Usa threads para resolver múltiplos domínios simultaneamente
- Configuração de Threads: Ajuste o número de threads com
--threads - Timeout Otimizado: Evita esperas desnecessárias em domínios problemáticos
- Ordenação de Resultados: Saída ordenada alfabeticamente por domínio
- Reconhecimento de Segurança: Enumerar IPs de subdomínios descobertos
- Monitoramento de Infraestrutura: Verificar IPs de múltiplos serviços
- Análise de DNS: Identificar mudanças de IP ao longo do tempo
- Automação: Integração em pipelines de CI/CD ou scripts de monitoramento
Este projeto é distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Contribuições são bem-vindas! Para contribuir:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Para dúvidas ou problemas:
- Verifique se está usando Python 3.6+
- Teste com domínios conhecidos primeiro
- Use a opção
--verbosepara mais detalhes - Abra uma issue no repositório
- Lançamento inicial
- Suporte básico a resolução de IPs
- Múltiplos formatos de entrada e saída
- Processamento concorrente
- Tratamento completo de erros