我正在尝试使用 scapy 嗅探一个外出的 http 数据包,在其中添加一些新的 http 标头并将其发送。此处的目的是仅插入新标头,同时保持数据包完整。如果需要,最多应进行任何校验和重新计算。
已经解决了几乎所有关于 SO 的问题,但并没有完全得到解决方案。
以下是我所做的。
def parse(pkt):
if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
pkt = pkt / "New Header:value\r\n\r\n"
# OR i tried this
#pkt = pkt.getlayer(Raw).load / Raw.load(load="New Header:value\r\n\r\n")
#pkt.getlayer(Raw).load("New Header:value\r\n\r\n")
pkt.show()
#del pkt[IP].chksum
send(pkt)
#end parse function
# start sniffing
a=sniff(filter="tcp and ( port 80 )", prn=parse)
问题是上面的代码插入了一个新的原始有效负载部分,而不是添加一个普通的标头。根据 HTTP 标准,已经有一个双换行符 \r\n\r\n 来指示标头终止。
为了克服这个问题,我尝试通过执行以下操作删除最后一个 \r\n
#pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")
但这会剥离所有先前存在的标头,并且只保留“新标头”。
我在 Linux mint 上试过这个。
更新:我正在尝试创建一个新的 http 有效负载,其中包含以前的标头,我将添加一些。有人可以帮助如何删除现有图层