2016-04-22 5 views
2

Я работаю над созданием ложного ответа DNS для моей домашней работы.Ответ DNS не принят DNS-клиентом

Я могу успешно послать поддельный ответ до фактического ответа сервера DNS (проверяется путем захвата пакетов)

пакетов захвата ответов DNS:

======================================================================= 
MY FAKE DNS RESPONSE 
-------------------- 
Wed Apr 20 22:04:25 2016 Ether-type: IP (0x0800) 
Source MAC Address: 00:0c:29:b6:95:c8 Destination MAC Address: 00:0c:29:0f:e9:96 
Source IP Address: 192.168.88.132 Destination IP Address: 192.168.88.131 
UDP packet Source Port: 53  Destn Port: 37837 UDP Length = 46 
============ 
UDP PAYLOAD: 
============ 
2d 97 81 80 00 01 00 01 00 00 00 00 02 69 6e  -............in 
05 79 61 68 6f 6f 03 63 6f 6d 00 00 01 00 01  .yahoo.com..... 
c0 0c 00 01 00 01 00 00 02 58 00 04 9b 21 11  .........X...!. 
44  D........X...!. 


======================================================================= 
ACTUAL DNS RESPONSE 
------------------- 
Wed Apr 20 22:04:25 2016 Ether-type: IP (0x0800) 
Source MAC Address: 00:50:56:e9:cd:36 Destination MAC Address: 00:0c:29:0f:e9:96 
Source IP Address: 192.168.88.2  Destination IP Address: 192.168.88.131 
UDP packet Source Port: 53  Destn Port: 37837 UDP Length = 89 
============ 
UDP PAYLOAD: 
============ 
2d 97 81 80 00 01 00 03 00 00 00 00 02 69 6e  -............in 
05 79 61 68 6f 6f 03 63 6f 6d 00 00 01 00 01  .yahoo.com..... 
c0 0c 00 05 00 01 00 00 00 05 00 0f 06 66 64  .............fd 
2d 66 70 32 03 77 67 31 01 62 c0 0f c0 2a 00  -fp2.wg1.b...*. 
01 00 01 00 00 00 05 00 04 62 8b b7 18 c0 2a  .........b....* 
00 01 00 01 00 00 00 05 00 04 62 8b b4 95  ..........b...* 


======================================================================= 

Как вы можете видеть мою подделку ответ до фактического ответа DNS. Но по какой-то причине клиент DNS всегда принимает более поздний (подлинный) ответ.

Вопросы:

  1. Почему мой ответ DNS не принимаются клиентом DNS, даже если он прибывает до фактического один?
  2. Это из-за ошибочного формата ответа DNS-ответа?
  3. Это потому, что IP-адрес поддельного ответа отличается от фактического?
  4. Есть ли какие-либо DNS-отлаживатели/журналы , которые могут помочь мне узнать, почему мой ответ не принят DNS-клиентом?
  5. Любые другие причины?

Выход отладки из Ubuntu 14.04

Я действительно застрял с этой проблемой в течение 3 дней, и я не в состоянии выяснить причину. Любая помощь приветствуется :)

+0

Может ли он использовать реальный отклик, потому что именно он получает _last_? Клиент может работать с последней информацией. Любой шанс, что вы можете отключиться от интернета или иначе заблокировать подлинный пакет DNS и посмотреть, что произойдет? И не похоже, что на вашем компьютере есть какие-либо DNS-кэши: http://stackoverflow.com/questions/11020027/dns-caching-in-linux – yano

+0

Спасибо yano, но я думаю, что это невозможно в соответствии с этим статья: http: // serverfault.com/questions/102879/how-do-dns-clients-choose-an-ip-address-when-they-get-multiple-answers –

ответ

0

Все сокетные соединения имеют 4 параметра, которые идентифицируют их. Source IP, Source Port, Dest IP и Dest Port.

В приведенном выше примере Исходный IP-адрес для ложного ответа DNS UDP неверен, поэтому пакет никогда не достигнет сокета. И если IP-адрес источника был прав, несовпадающий MAC-адрес также может быть заблокирован, так как он не соответствует таблице ARP (rpfilter).

+0

okkk, так как я могу отключить это обучение MAC и сделать фальшивый пакет отправлен DNS-клиент? OR будет работать, если я обманываю MAC-адрес источника? –

+0

Для фильтрации MAC вы можете найти некоторую информацию здесь: http://www.slashroot.in/linux-kernel-rpfilter-settings-reverse-path-filtering. Его можно отключить через файловую систему/proc. Помните, что когда вы выполняете спуфинг MAC, ваш сетевой коммутатор запутается и начнет перенаправлять вам трафик шлюза, поскольку он видит, что исходный MAC-адрес переместился в новый порт. –

+0

Я предполагаю, что вы хотите манипулировать DNS для программы. Вероятно, есть несколько более простых подходов. Вы можете просто вставить записи, которые хотите переопределить, в файл/etc/hosts или настроить /etc/resolv.conf для отправки всех DNS-запросов в приложение dns-proxy, которое вы пишете сами. –

1

Для того, чтобы ваш фальшивый ответ DNS работал правильно, сначала: порт назначения UDP, идентификатор транзакции DNS и запрашиваемое доменное имя должны соответствовать запросу клиента. Я полагаю, вы уже сделали это правильно.

Однако, как упоминалось Стейном, IP-адрес источника ответа DNS должен соответствовать IP-адресу законного DNS-сервера; если нет, то он удаляется клиентом. (AFAIK, MAC-адрес источника не обязательно должен совпадать.)

Для того чтобы установить исходный IP-адрес самостоятельно, вам необходимо создать IP-разъем RAW вместо гнезда UDP и создать полный UDP-код пакет (ложный ответ DNS) с использованием пакета RAW IP. Вы можете найти фрагменты кода here для создания такого сокета RAW IP и подделать UDP-пакет из RAW (включая контрольную сумму UDP).

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