Захватывает ответы DNS с PCap.Net? - PullRequest
1 голос
/ 17 августа 2010

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

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

1 Ответ

3 голосов
/ 17 августа 2010

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

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

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

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

...