Сниффер DNS-трафика на основе Python

Я пытаюсь написать анализатор пакетов DNS на python для сбора информации всякий раз, когда обнаруживается пакет NXdomain, например, код ответа, запрос, используемый транспортный протокол, порт назначения, авторизованный сервер имен.

Во-первых, я не знаю, с чего начать. Я смотрел некоторые учебные пособия на YouTube, но большинство из них обнюхивают кадры Ethernet и пытаются получить информацию из (кадра IP/ARP) внутри кадра Ethernet, но эта информация бесполезна для меня, так как я хочу получить информацию о DNS, обнюхивая пакет DNS. .

Любая помощь могла бы быть полезна.


person Haseeb Shaukat    schedule 07.08.2020    source источник
comment
Две проблемы: во-первых, вам нужно получить доступ к пакетам; во-вторых, вам нужно будет предоставить некоторый код, иначе этот вопрос, скорее всего, будет закрыт либо потому, что ответы будут основаны на мнении, либо потому, что вопрос недостаточно конкретен. Никакого отражения на вас, так работает ТАК.   -  person holdenweb    schedule 07.08.2020
comment
Кроме того, см. pypi.org/project/dnspython — там, скорее всего, будет выполняться вся необходимая обработка записей. .   -  person holdenweb    schedule 07.08.2020
comment
Да, я обнюхал пакеты, но информации, которую я хочу получить, нет в пакете кадра Ethernet. Итак, я ищу помощи, чтобы подойти к проблеме в правильном направлении. например, где находится DNS-пакет? Как получить этот DNS-пакет? Во-вторых, упомянутая вами библиотека не может использоваться для сниффинга. Используя эту библиотеку dnspython, мы можем просто преобразовать доменные имена в их соответствующие IP-адреса, указав имя хоста, что не имеет места в смысле Sniffing!   -  person Haseeb Shaukat    schedule 07.08.2020


Ответы (1)


В случае (наиболее актуального) трафика DNS он будет передаваться как полезная нагрузка дейтаграмм UDP, которые сами по себе передаются как полезная нагрузка дейтаграмм Интернет-протокола, и именно эти дейтаграммы передаются внутри кадров Ethernet.

Я предполагаю, что вы знакомы с форматами кадров Ethernet и понимаете, что полезная нагрузка начинается (при условии, что вы имеете в виду Ethernet, а не 802.3) после 14 байтов заголовка. Дейтаграмма IPv4 также использует заголовок фиксированной длины, на этот раз 20 байтов, но может также включать так называемые опции.

Протокол UDP использует очень простой 16-байтовый заголовок.

Таким образом, если вы хотите сделать быстрое предположение, кадры без параметров IP будут иметь пакет DNS, начинающийся после (16+20+16) == 52 байтов заголовков более низкого уровня. Если вы хотите обрабатывать все пакеты, вам нужно научиться вычислять длину IP-заголовков с параметрами.

Библиотека dnspython заслуживает изучения, так как она способна преобразование потоков байтов в сообщения DNS, что является очень удобным способом доступа к информации о пакетах DNS.

В этом ответе нет кода, так как в вашем вопросе нет кода. Возможно, вы можете продолжить с новым вопросом, в котором вы должны ошибиться в коде, который вы действительно пробовали, - это дало бы ответчикам, но не над чем работать.

person holdenweb    schedule 08.08.2020