Да, это возможно.
Пример кода будет немного по длинной стороне, хотя ...
В сущности, вам нужно:
- извлечь сетевой заголовок
- экстракте заголовка IP
- извлечь заголовок UDP [предполагая, что пакет не фрагментирован или используется TCP]
- извлечь полезную нагрузку DNS
затем обработайте остальную часть пакета в соответствии с очень подробным описанием, приведенным в RFC 1035.
На практике это означает:
- проигнорирует - всю информацию, вам нужно в ответах (
QR == 1
)
- проверка
RCODE == 0
и ANCOUNT > 0
- взгляд в разделе Вопрос найти имя, которое было запрошено
- Искать ответы в Ответ (duh!) раздел
Чтобы еще более усложнить вы должны обрабатывать DNS этикетки (серия <count><data...>
полей) и потенциально обрабатывать сжатые этикетки тоже!
Это звучит противно, но на самом деле это не , что сложно. У меня есть код на C++, который делает все это, и это не так долго, но я не могу его освободить.
См. Обсуждение в http://pcapdotnet.codeplex.com/Thread/View.aspx?ThreadId=223803 – brickner
Парсер DNS находится в разработке для SharpPcap. Разбор вопросов/ответов динамически для всех случаев использования может стать довольно волосатым, но он находится в списке задач в ближайшем будущем. –
Эван - извините за возрождение древней темы, но был ли парсер DNS для SharpPcap когда-либо завершен? Я ищу для анализа запросов DNS-запросов и пакетов ответов с использованием SharpPcap/Packet.Net, но не нашел их в последних загрузках (или в Интернете). Благодаря! –