
Python-клиент для dnsdumpster.com, предназначенный для получения DNS-записей, поддоменов и сетевых карт в целях разведки и исследований в области безопасности.
⚠️ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: Это НЕОФИЦИАЛЬНАЯ обёртка API для dnsdumpster.com, которая парсит публичный веб-сайт.
DNSDumpster.com предлагает официальный тарифный план API для коммерческого и интенсивного использования. Если вам нужен надёжный доступ производственного уровня, рассмотрите их официальный API: https://dnsdumpster.com/
Эту неофициальную обёртку следует использовать ответственно и в соответствии с условиями обслуживания DNSDumpster.
Клиентская библиотека на Python для взаимодействия с dnsdumpster.com с целью получения DNS-записей и информации о поддоменах. Этот инструмент полезен для исследователей безопасности, специалистов по пентесту и сетевых администраторов для целей разведки.
pip install dnsdumpster
pip install git+https://github.com/PaulSec/API-dnsdumpster.com.git
# Клонировать репозиторий
git clone https://github.com/PaulSec/API-dnsdumpster.com
cd API-dnsdumpster.com
# Установить в режиме разработки
pip install -e .
# Установить зависимости для разработки
pip install -r requirements-dev.txt
from dnsdumpster.DNSDumpsterAPI import DNSDumpsterAPI
# Инициализация API
api = DNSDumpsterAPI(verbose=True)
# Поиск по домену
results = api.search('example.com')
# Доступ к результатам
print(f"Домен: {results['domain']}")
print(f"DNS-записи: {results['dns_records']['dns']}")
print(f"MX-записи: {results['dns_records']['mx']}")
print(f"NS-записи: {results['dns_records']['ns']}")
print(f"TXT-записи: {results['dns_records']['txt']}")
from dnsdumpster.DNSDumpsterAPI import DNSDumpsterAPI
api = DNSDumpsterAPI()
results = api.search('microsoft.com')
# Вывести все A-записи (поддомены)
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"Карта сети сохранена! 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("Файл Excel сохранён!")
import requests
from dnsdumpster.DNSDumpsterAPI import DNSDumpsterAPI
# Создание пользовательской сессии с прокси
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"Сетевая ошибка: {e}")
except DNSDumpsterParseError as e:
print(f"Ошибка парсинга: {e}")
except DNSDumpsterAPIError as e:
print(f"Ошибка API: {e}")
Метод search() возвращает словарь следующей структуры:
{
'domain': 'example.com',
'dns_records': {
'dns': [ # A-записи (поддомены)
{
'host': 'subdomain.example.com',
'ip': '192.0.2.1',
'reverse_dns': 'reverse.dns.com',
'asn': 'ASN:12345',
'asn_name': 'Provider Name',
'country': 'United States',
'subnet': '192.0.2.0/24',
'open_services': '80, 443',
# Ключи для обратной совместимости:
'domain': 'subdomain.example.com',
'as': 'ASN:12345',
'provider': 'Provider Name'
}
],
'mx': [ # MX-записи
{
'priority': '10',
'server': 'mail.example.com',
'ip': '198.51.100.1',
'reverse_dns': 'mail.reverse.com',
'asn': 'ASN:23456',
'asn_name': 'Mail Provider',
'country': 'Germany',
'subnet': '198.51.100.0/24'
}
],
'ns': [ # NS-записи
{
'nameserver': 'ns1.example.com',
'ip': '203.0.113.1',
'reverse_dns': 'ns1.reverse.com',
'asn': 'ASN:34567',
'asn_name': 'DNS Provider',
'country': 'United Kingdom',
'subnet': '203.0.113.0/24'
}
],
'txt': [ # TXT-записи
'v=spf1 include:_spf.example.com ~all',
'google-site-verification=abcdef123456'
],
'host': [] # Псевдоним для NS-записей (обратная совместимость)
},
'image_data': b'base64_encoded_image_bytes', # или None
'image_url': 'https://dnsdumpster.com/static/map/example.com.png',
'xls_data': b'base64_encoded_excel_bytes', # или None
'xls_url': 'https://dnsdumpster.com/static/xlsx/example-uuid.xlsx'
}
# Клонировать репозиторий
git clone https://github.com/PaulSec/API-dnsdumpster.com
cd API-dnsdumpster.com
# Создать виртуальное окружение
python -m venv venv
source venv/bin/activate # На Windows: venv\Scripts\activate
# Установить зависимости
pip install -r requirements.txt
pip install -r requirements-dev.txt
# Установить pre-commit хуки (опционально)
pip install pre-commit
pre-commit install
# Запустить все тесты
pytest
# Запустить с покрытием
pytest --cov=dnsdumpster --cov-report=html
# Запустить конкретный файл тестов
pytest tests/test_parsing.py
# Запустить с подробным выводом
pytest -v
# Запустить конкретный тест
pytest tests/test_parsing.py::TestRetrieveResults::test_retrieve_results_basic
# Форматирование кода с помощью black
black dnsdumpster/ tests/
# Сортировка импортов
isort dnsdumpster/ tests/
# Линтинг с помощью flake8
flake8 dnsdumpster/ tests/
# Проверка типов с помощью mypy
mypy dnsdumpster/
# Запустить все проверки качества
black dnsdumpster/ tests/ && isort dnsdumpster/ tests/ && flake8 dnsdumpster/ tests/ && mypy dnsdumpster/
API-dnsdumpster.com/
├── dnsdumpster/ # Основной пакет
│ ├── __init__.py
│ ├── DNSDumpsterAPI.py # Основной класс API
│ ├── API_example.py # Пример использования
│ └── requirements.txt
├── tests/ # Набор тестов
│ ├── __init__.py
│ ├── conftest.py # Фикстуры pytest
│ ├── test_parsing.py # Модульные тесты
│ └── test_integration.py # Интеграционные тесты
├── .github/
│ └── workflows/ # CI/CD рабочие процессы
│ ├── tests.yml
│ └── publish.yml
├── requirements.txt # Производственные зависимости
├── requirements-dev.txt # Зависимости для разработки
├── setup.py # Конфигурация пакета
├── README.md
└── LICENSE
Мы приветствуем ваш вклад! Вот как вы можете помочь:
git checkout -b feature/amazing-feature)pytest)black, flake8, mypy)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Тестирование отдельных методов парсинга без сетевых вызовов:
pytest tests/test_parsing.py -v
Тестирование полного рабочего процесса API с имитацией HTTP-ответов:
pytest tests/test_integration.py -v
pytest --cov=dnsdumpster --cov-report=term-missing
Проект использует GitHub Actions для:
Этот проект лицензирован под MIT License — подробности см. в файле LICENSE.
Это неофициальный инструмент, который не связан с dnsdumpster.com и не одобрен им. Используйте ответственно и в соответствии с условиями обслуживания и robots.txt целевого веб-сайта. Авторы не несут ответственности за неправильное использование этого инструмента.
Полную историю версий см. в CHANGELOG.md.