
Cliente de Python para dnsdumpster.com que permite recuperar registros DNS, subdominios y mapas de red para reconocimiento e investigación de seguridad.
⚠️ AVISO IMPORTANTE: Este es un envoltorio de API NO OFICIAL para dnsdumpster.com que extrae datos del sitio web público.
DNSDumpster.com ofrece un plan de API oficial para uso comercial y de alto volumen. Si necesitas acceso fiable y de nivel de producción, considera su API oficial: https://dnsdumpster.com/
Este envoltorio no oficial debe utilizarse de forma responsable y de acuerdo con los términos de servicio de DNSDumpster.
Una biblioteca cliente de Python para interactuar con dnsdumpster.com y recuperar registros DNS e información de subdominios. Esta herramienta es útil para investigadores de seguridad, testers de penetración y administradores de red con fines de reconocimiento.
pip install dnsdumpster
pip install git+https://github.com/PaulSec/API-dnsdumpster.com.git
# Clonar el repositorio
git clone https://github.com/PaulSec/API-dnsdumpster.com
cd API-dnsdumpster.com
# Instalar en modo desarrollo
pip install -e .
# Instalar dependencias de desarrollo
pip install -r requirements-dev.txt
from dnsdumpster.DNSDumpsterAPI import DNSDumpsterAPI
# Inicializar la API
api = DNSDumpsterAPI(verbose=True)
# Buscar un dominio
results = api.search('example.com')
# Acceder a los resultados
print(f"Dominio: {results['domain']}")
print(f"Registros DNS: {results['dns_records']['dns']}")
print(f"Registros MX: {results['dns_records']['mx']}")
print(f"Registros NS: {results['dns_records']['ns']}")
print(f"Registros TXT: {results['dns_records']['txt']}")
from dnsdumpster.DNSDumpsterAPI import DNSDumpsterAPI
api = DNSDumpsterAPI()
results = api.search('microsoft.com')
# Imprimir todos los registros A (subdominios)
for record in results['dns_records']['dns']:
print(f"{record['host']} - {record['ip']} - {record['country']}")
import base64
results = api.search('example.com')
if results['image_data']:
with open('network_map.png', 'wb') as f:
f.write(base64.b64decode(results['image_data']))
print(f"¡Mapa de red guardado! URL: {results['image_url']}")
import base64
results = api.search('example.com')
if results['xls_data']:
with open('results.xlsx', 'wb') as f:
f.write(base64.b64decode(results['xls_data']))
print("¡Archivo Excel guardado!")
import requests
from dnsdumpster.DNSDumpsterAPI import DNSDumpsterAPI
# Crear sesión personalizada con proxy
session = requests.Session()
session.proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'https://proxy.example.com:8080',
}
api = DNSDumpsterAPI(session=session)
results = api.search('example.com')
from dnsdumpster.DNSDumpsterAPI import (
DNSDumpsterAPI,
DNSDumpsterAPIError,
DNSDumpsterRequestError,
DNSDumpsterParseError
)
api = DNSDumpsterAPI()
try:
results = api.search('example.com')
except DNSDumpsterRequestError as e:
print(f"Error de red: {e}")
except DNSDumpsterParseError as e:
print(f"Error de análisis: {e}")
except DNSDumpsterAPIError as e:
print(f"Error de API: {e}")
El método search() devuelve un diccionario con la siguiente estructura:
{
'domain': 'example.com',
'dns_records': {
'dns': [ # Registros A (subdominios)
{
'host': 'subdomain.example.com',
'ip': '192.0.2.1',
'reverse_dns': 'reverse.dns.com',
'asn': 'ASN:12345',
'asn_name': 'Nombre del proveedor',
'country': 'Estados Unidos',
'subnet': '192.0.2.0/24',
'open_services': '80, 443',
# Claves de compatibilidad hacia atrás:
'domain': 'subdomain.example.com',
'as': 'ASN:12345',
'provider': 'Nombre del proveedor'
}
],
'mx': [ # Registros MX
{
'priority': '10',
'server': 'mail.example.com',
'ip': '198.51.100.1',
'reverse_dns': 'mail.reverse.com',
'asn': 'ASN:23456',
'asn_name': 'Proveedor de correo',
'country': 'Alemania',
'subnet': '198.51.100.0/24'
}
],
'ns': [ # Registros NS
{
'nameserver': 'ns1.example.com',
'ip': '203.0.113.1',
'reverse_dns': 'ns1.reverse.com',
'asn': 'ASN:34567',
'asn_name': 'Proveedor de DNS',
'country': 'Reino Unido',
'subnet': '203.0.113.0/24'
}
],
'txt': [ # Registros TXT
'v=spf1 include:_spf.example.com ~all',
'google-site-verification=abcdef123456'
],
'host': [] # Alias para registros NS (compatibilidad hacia atrás)
},
'image_data': b'base64_encoded_image_bytes', # o None
'image_url': 'https://dnsdumpster.com/static/map/example.com.png',
'xls_data': b'base64_encoded_excel_bytes', # o None
'xls_url': 'https://dnsdumpster.com/static/xlsx/example-uuid.xlsx'
}
# Clonar el repositorio
git clone https://github.com/PaulSec/API-dnsdumpster.com
cd API-dnsdumpster.com
# Crear entorno virtual
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# Instalar dependencias
pip install -r requirements.txt
pip install -r requirements-dev.txt
# Instalar hooks de pre-commit (opcional)
pip install pre-commit
pre-commit install
# Ejecutar todas las pruebas
pytest
# Ejecutar con cobertura
pytest --cov=dnsdumpster --cov-report=html
# Ejecutar archivo de prueba específico
pytest tests/test_parsing.py
# Ejecutar con salida detallada
pytest -v
# Ejecutar prueba específica
pytest tests/test_parsing.py::TestRetrieveResults::test_retrieve_results_basic
# Formatear código con black
black dnsdumpster/ tests/
# Ordenar importaciones
isort dnsdumpster/ tests/
# Lint con flake8
flake8 dnsdumpster/ tests/
# Verificación de tipos con mypy
mypy dnsdumpster/
# Ejecutar todas las verificaciones de calidad
black dnsdumpster/ tests/ && isort dnsdumpster/ tests/ && flake8 dnsdumpster/ tests/ && mypy dnsdumpster/
API-dnsdumpster.com/
├── dnsdumpster/ # Paquete principal
│ ├── __init__.py
│ ├── DNSDumpsterAPI.py # Clase principal de la API
│ ├── API_example.py # Ejemplo de uso
│ └── requirements.txt
├── tests/ # Suite de pruebas
│ ├── __init__.py
│ ├── conftest.py # Fixtures de pytest
│ ├── test_parsing.py # Pruebas unitarias
│ └── test_integration.py # Pruebas de integración
├── .github/
│ └── workflows/ # Flujos de trabajo CI/CD
│ ├── tests.yml
│ └── publish.yml
├── requirements.txt # Dependencias de producción
├── requirements-dev.txt # Dependencias de desarrollo
├── setup.py # Configuración del paquete
├── README.md
└── LICENSE
¡Agradecemos las contribuciones! Así es como puedes ayudar:
git checkout -b feature/caracteristica-increible)pytest)black, flake8, mypy)git commit -m 'Añadir característica increíble')git push origin feature/caracteristica-increible)Prueba métodos de análisis individuales sin llamadas de red:
pytest tests/test_parsing.py -v
Prueba el flujo completo de la API con respuestas HTTP simuladas:
pytest tests/test_integration.py -v
pytest --cov=dnsdumpster --cov-report=term-missing
El proyecto utiliza GitHub Actions para:
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.
Esta es una herramienta no oficial y no está afiliada ni respaldada por dnsdumpster.com. Úsala de forma responsable y de acuerdo con los términos de servicio y robots.txt del sitio web objetivo. Los autores no son responsables del mal uso de esta herramienta.
Consulta CHANGELOG.md para el historial completo de versiones.