В случае (самого последнего) трафика 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.
В этом ответе нет кода, поскольку в вашем вопросе нет кода. Возможно, вы сможете продолжить с новым вопросом, в котором вы должны дать сбой в коде, который вы действительно пробовали, - это даст ответчикам, но не над чем работать.