como adicionar cabeçalhos http a um pacote sniffed usando scapy
Eu estou tentando farejar um pacote http indo usando scapy, adicionar alguns novos cabeçalhos http e enviá-lo à frente. A intenção aqui é inserir apenas novos cabeçalhos enquanto mantém o pacote intacto. No máximo, qualquer recálculo da soma de verificação deve ser feito, se necessário.
Já passei por quase todas as perguntas sobre SO, mas não obtive exatamente uma solução.
A seguir está o que eu fiz.
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)
O problema é que o código acima insere uma nova seção de carga útil em vez de adicionar um cabeçalho simples. Já existe uma nova linha dupla \ r \ n \ r \ n para indicar a finalização do cabeçalho de acordo com o padrão HTTP.
Para superar isso eu tentei remover o último \ r \ n, fazendo o seguinte
#pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")
Mas isso remove todos os cabeçalhos existentes anteriormente e apenas o "Novo Cabeçalho" permanece.
Eu tentei isso no Linux mint.
ATUALIZAÇÃO: Estou tentando criar uma nova carga útil HTTP que contenha cabeçalhos anteriores e adicionarei alguns. Alguém pode ajudar com a remoção de uma camada existente