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ミントでこれを試しました。
更新:以前のヘッダーを含む新しい http ペイロードを作成しようとしていますが、いくつか追加します。既存のレイヤーを削除する方法を教えてください。