Захватывает ответы DNS с PCap.Net?

В1 - Можно ли перехватить DNS-запрос / ответы с помощью библиотеки?

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

1 ответ

Решение

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

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

По сути, вам необходимо:

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

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

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

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

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

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

Другие вопросы по тегам