Я пытаюсь обнюхать исходящий http-пакет, используя scapy, добавить в него несколько новых заголовков 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)
Проблема в том, что приведенный выше код вставляет новый необработанный раздел полезной нагрузки вместо простого заголовка. Уже есть двойная новая строка \r\n\r\n для обозначения завершения заголовка в соответствии со стандартом HTTP.
Чтобы преодолеть это, я попытался удалить последний \r\n, выполнив следующие действия.
#pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")
Но это удаляет все ранее существовавшие заголовки, и остается только «Новый заголовок».
Я пробовал это на Linux Mint.
ОБНОВЛЕНИЕ: я пытаюсь создать новую полезную нагрузку http, которая будет содержать предыдущие заголовки, и я добавлю некоторые из них. Может ли кто-нибудь помочь с удалением существующего слоя