Python DNS-трафик на основе c Sniffer - PullRequest
0 голосов
/ 07 августа 2020

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

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 августа 2020

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

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

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

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

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

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

...