Alterar a carga útil do TCP com nfqueue / scapy

Olá, estou usando nfqueue e scapy e meu objetivo é receber pacotes no meu NFQUEUE, alterar a carga útil e reenviá-los.

Posso alterar campos como o TTL sem nenhum tipo de problema, mas quando se trata de alterar a carga útil, estou encontrando problemas.

Quando altero a carga útil, farejo o pacote com o wireshark e, aparentemente, envio o pacote com a carga modificada, mas o servidor não responde.

Este é o meu código:

#!/usr/bin/env python

import nfqueue
from scapy.all import *
def callback(payload):
    data = payload.get_data()
    pkt = IP(data)

    pkt[TCP].payload = str(pkt[TCP].payload).replace("ABC","GET")

    pkt[IP].ttl = 40

    print 'Data: '+ str(pkt[TCP].payload)
    print 'TTL: ' + str(pkt[IP].ttl)

    del pkt[IP].chksum
    payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))
def main():
    q = nfqueue.queue()
    q.open()
    q.bind(socket.AF_INET)
    q.set_callback(callback)
    q.create_queue(0)
    try:
        q.try_run() # Main loop
    except KeyboardInterrupt:
        q.unbind(socket.AF_INET)
        q.close()

main()

Eu configurei esta regra para o tráfego de saída na porta 80:iptables -I OUTPUT -s 192.168.1.10 -p tcp --dport 80 -j NFQUEUE

E, para testá-lo, por exemplo, abro o telnet para a porta 80 do google, faça umGET / HTTP/1.1 e é isso que eu vejo:

TTL: 40
DATA: GET / HTTP/1.1

Agora, se eu fizerABC / HTTP/1.1 Não recebo resposta! Meu telnet ficou preso.

Eu também tentei nos navegadores de sites HTTP procurar algo, verificar no wireshark como meu TTL está realmente mudando para 40 e, em seguida, procurar a string "ABC" e meu navegador novamente travar. Detesto o pedido alterado para GET, mas não recebo resposta.

Thank é meio que me dando dor de cabeça e eu realmente apreciaria se alguém com mais experiência pudesse me levar ao caminho certo. Agradeço antecipadamente.