python – NetfilterQueue set_payload不起作用
发布时间:2020-12-20 13:17:09 所属栏目:Python 来源:网络整理
导读:我正在使用NetfilterQueue和scapy来完成监视器和篡改数据包程序. 但我遇到麻烦,NetfilterQueue模块的set_payload()方法对我来说似乎不起作用. 这是我的源代码. from netfilterqueue import NetfilterQueue as nfqueuefrom scapy.all import *import osimport
我正在使用NetfilterQueue和scapy来完成监视器和篡改数据包程序.
但我遇到麻烦,NetfilterQueue模块的set_payload()方法对我来说似乎不起作用. 这是我的源代码. from netfilterqueue import NetfilterQueue as nfqueue from scapy.all import * import os import socket import re baidu_ip = socket.gethostbyname('www.baidu.com') print "Got baidu ip: " + baidu_ip iptablesr = 'iptables -t mangle -A POSTROUTING -p tcp -j NFQUEUE --queue-num 1' print("Adding iptable rules :") print(iptablesr) os.system(iptablesr) iptablesr = 'iptables -t mangle -A POSTROUTING -p udp -j NFQUEUE --queue-num 1' print(iptablesr) os.system(iptablesr) def callback(packet): modified = False sca_pkt = IP(packet.get_payload()) # This is the main logic,to modify the packet try: dns_lookup = re.search(r'DNS Qry "([w.]+)"',sca_pkt[DNS].summary()).group(1) if re.search(r'baidu.com',dns_lookup) != None: sca_pkt[DNS].qd = DNSQR(qname='www.163.com') sca_pkt[UDP].len = len(bytes(sca_pkt[UDP])) sca_pkt[UDP].chksum = 0x0000 modified = True except: pass # Accept the modified packet if modified == True: print 'debug sca_pkt: ' + sca_pkt.summary() packet.set_payload(str(sca_pkt)) print 'debug packet: ' + IP(packet.get_payload()).summary() packet.accept() return packet.accept() def main(): q = nfqueue() q.bind(1,callback) try: q.run() except KeyboardInterrupt: q.unbind() print "Flushing iptables." os.system('iptables -F') os.system('iptables -F -t mangle') if __name__ == '__main__': main() 这是我得到的输出. Got baidu ip: 180.97.33.108 Adding iptable rules : iptables -t mangle -A POSTROUTING -p tcp -j NFQUEUE --queue-num 1 iptables -t mangle -A POSTROUTING -p udp -j NFQUEUE --queue-num 1 debug sca_pkt: IP / UDP / DNS Qry "www.163.com" debug packet: IP / UDP / DNS Qry "baidu.com." 您可以从调试信息中看到,set_payload()不起作用. (我将数据包设置为sca_pkt中显示的值,但是当我获得数据包有效负载摘要时,它仍然是原始值) 我刚刚尝试了两个版本的NetfilterQueue,包括pip版本和https://github.com/kti/python-netfilterqueue.git版本. 那么有人可以帮助我吗?我对此非常好奇. 解决方法
我不知道您使用的是哪个scapy版本,但是set_payload已被弃用.
Insead: packet.set_payload(str(sca_pkt)) 你应该尝试类似的东西: packet.payload = sca_pkt.payload 请注意,这也将更改UDP字段.如果您只想更改DNS,您可以使用: packet[DNS] = sca_pkt[DNS] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |