Я пытаюсь написать скрипт python, который отправляет несколько DNS-запросов, используя другой сервер имен для каждого запроса.Python: Реализация параллельных запросов DNS (конвейерная обработка)
Реализация последовательного решения легко с помощью dnspython, но слишком медленная для меня. Добавление параллелизма с помощью пула потоков невозможно, так как в моем конкретном случае все запросы используют один и тот же исходный порт (здесь также не поможет REUSE_ADDRESS).
По вышеуказанным причинам я думал об использовании следующего решения (канав использования модуля распознавателя dnspython, но, воспользовавшись его здание сообщения и разбора модулей):
- позволяет до запросов X, чтобы быть в ходе
- запросы Send X одновременно (только отправка Dns пакетов запросов с использованием ПДПА. Возможно, с добавлением задержки между посылает, чтобы избежать очередей)
- различного ожидания потока для ответов
- Когда ответ приходит сравнить его с запрос (по адресу) и разрешить новый запрос запустить
- Если ответ на запрос не поступает в течение TIMEOUT секунд пометить его как завершенное и разрешить новый запрос запустить
Мои основные вопросы здесь:
- Как реализовать тайм-аут задачи легко
- можно ли реализовать без использования синхронизации потоков (например, используя цикл событий?)
- Есть ли какая-либо существующая библиотека, которая может помочь ее реализовать (мне кажется, что я пытаюсь изобрести колесо здесь, я заглянул в модуль asycnio, но не мог понять, как воспользоваться это для моей проблемы). Обратите внимание: я не хочу использовать существующие dns или сетевые библиотеки, поскольку мне нужна гибкость изменения основных функций (например, использование сырых сокетов, изменение полей заголовка DNS и т. Д.).
Мне нужно использовать другой сервер имен для каждого запроса, и, похоже, для него не разработаны aiodns. – roee88
Вы можете создать экземпляр 'DNSResolver' для сервера имен и указать нужный DNS-ip через параметр' nameservers'. Instantiatig 'DNSResolver' - относительная легкая задача. –