2010-08-17 2 views
1

Q1 - Возможно ли захватить запрос/ответы DNS с помощью библиотеки?Захват DNS-ответов с помощью PCap.Net?

Q2 - Если да, то когда у меня есть пакет, у кого-нибудь есть код образца , который показывает, как я мог извлечь поля из ответа DNS? В определен IP-адрес, разрешенный DNS для данного DNS-имени , в частности.

+0

См. Обсуждение в http://pcapdotnet.codeplex.com/Thread/View.aspx?ThreadId=223803 – brickner

+0

Парсер DNS находится в разработке для SharpPcap. Разбор вопросов/ответов динамически для всех случаев использования может стать довольно волосатым, но он находится в списке задач в ближайшем будущем. –

+0

Эван - извините за возрождение древней темы, но был ли парсер DNS для SharpPcap когда-либо завершен? Я ищу для анализа запросов DNS-запросов и пакетов ответов с использованием SharpPcap/Packet.Net, но не нашел их в последних загрузках (или в Интернете). Благодаря! –

ответ

2

Да, это возможно.

Пример кода будет немного по длинной стороне, хотя ...

В сущности, вам нужно:

  1. извлечь сетевой заголовок
  2. экстракте заголовка IP
  3. извлечь заголовок UDP [предполагая, что пакет не фрагментирован или используется TCP]
  4. извлечь полезную нагрузку DNS

затем обработайте остальную часть пакета в соответствии с очень подробным описанием, приведенным в RFC 1035.

На практике это означает:

  1. проигнорирует - всю информацию, вам нужно в ответах (QR == 1)
  2. проверка RCODE == 0 и ANCOUNT > 0
  3. взгляд в разделе Вопрос найти имя, которое было запрошено
  4. Искать ответы в Ответ (duh!) раздел

Чтобы еще более усложнить вы должны обрабатывать DNS этикетки (серия <count><data...> полей) и потенциально обрабатывать сжатые этикетки тоже!

Это звучит противно, но на самом деле это не , что сложно. У меня есть код на C++, который делает все это, и это не так долго, но я не могу его освободить.

+0

отлично - спасибо Alnitak, я дам это сегодня, если смогу – Greg

+0

Alnitak - мне удается подобрать UDP-пакеты, однако я не слишком уверен, как разбить его на PcapDotNet.Packets.Transport .UdpDatagram? Вот моментальный снимок, который я вижу в VS2010 postimage.org/image.php?v=aV7un3J. Я полагаю, что нужно вручную проанализировать значение «((package.Ethernet.IpV4.Udp) .Payload) .Buffer? – Greg

+0

nb: неправильное редактирование для моего английского английского орфографии вернулось ... – Alnitak

Смежные вопросы