Hinzufügen von http-Headern zu einem Paket, das mit scapy abgehört wurde

Ich versuche, ein ausgehendes http-Paket mit scapy aufzuspüren, füge ein paar neue http-Header hinzu und sende es weiter. Die Absicht hier ist, nur neue Header einzufügen, während das Paket intakt bleibt. Bei Bedarf sollte eine Neuberechnung der Prüfsumme durchgeführt werden.

Habe fast alle Fragen zu SO durchgesehen, aber nicht genau eine Lösung gefunden.

Folgendes habe ich getan.

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)

Das Problem ist, dass der obige Code einen neuen Abschnitt für unformatierte Nutzdaten einfügt, anstatt einen einfachen Header hinzuzufügen. Es gibt bereits einen doppelten Zeilenvorschub \ r \ n \ r \ n, um die Beendigung des Headers gemäß dem HTTP-Standard anzuzeigen.

Um dies zu überwinden, habe ich versucht, das letzte \ r \ n wie folgt zu entfernen

   #pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")

Dadurch werden jedoch alle zuvor vorhandenen Header entfernt und es bleibt nur der "Neue Header" übrig.

Ich habe dies unter Linux Mint ausprobiert.

UPDATE: Ich versuche, eine neue http-Payload zu erstellen, die frühere Header enthält, und ich werde einige hinzufügen. Kann jemand helfen, wie man eine vorhandene Schicht entfernt

Antworten auf die Frage(1)

Ihre Antwort auf die Frage