Вопрос

Q1 - возможно ли захватить запрос / ответы DNS с библиотекой?

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

Это было полезно?

Решение

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

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

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

  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 ++, который делает все это, и это не так долго, но я не могу его выпустить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top