如何修改scapy数据包有效载荷

How to modify scapy packet payload

我有一个 python 文件,它声明要通过修改有效负载并将其发回的系统发送的数据包集。脚本从 python 文件导入数据包,发送和接收它们,并且需要能够预测修改后的数据包返回时的样子。

我的问题是,如何从从文件读取的数据包列表中生成具有修改后有效载荷的数据包?

输入文件定义了可变长度的数据包headers,类似于:

payload_len = 50
pkts = (Ether()/IP()/Raw(payload_len*b'\x00'), \
        Ether()/IP()/TCP()/Raw(payload_len*b'\x00'), \
        Ether()/IP()/UDP()/Raw(payload_len*b'\x00')

修改数据包的系统在有效载荷中放置了一个四字节的已知标签(例如0xdeadbeef)。它可以将该标签放在有效负载的开头或结尾。

因此脚本需要对列表中的每个数据包执行如下操作:

from packet_list import *
predict = pkts
predict[0].payload[0] = b'\xde'
predict[0].payload[1] = b'\xad'
predict[0].payload[2] = b'\xbe'
predict[0].payload[3] = b'\xef'

predict[2].payload[payload_len-4] = b'\xde'
predict[2].payload[payload_len-3] = b'\xad'
predict[2].payload[payload_len-2] = b'\xbe'
predict[2].payload[payload_len-1] = b'\xef'

您可以使用 load 来访问 Raw 个字节:

for pkt in pkts:
    payload = pkt.lastlayer()
    payload.load = b"\xde\xad\xbe\xef" + payload.load[4:] # or payload.load[:-4] + b"\xde\xad\xbe\xef"