Cambiar la carga útil de TCP con nfqueue / scapy

Hola, estoy usando nfqueue y scapy y mi objetivo es recibir paquetes en mi NFQUEUE, cambiar la carga útil y volver a enviarlos.

Puedo cambiar campos como el TTL sin ningún tipo de problema, pero cuando se trata de cambiar la carga útil, me encuentro con problemas.

Cuando cambio la carga útil, huelo el paquete con wireshark y aparentemente envío el paquete con la carga modificada, pero el servidor no responde.

Este es mi 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()

He establecido esta regla para el tráfico saliente al puerto 80:iptables -I OUTPUT -s 192.168.1.10 -p tcp --dport 80 -j NFQUEUE

Y, para probarlo, por ejemplo, abro telnet al puerto 80 de google, haga unGET / HTTP/1.1 y esto es lo que veo:

TTL: 40
DATA: GET / HTTP/1.1

Ahora si lo hagoABC / HTTP/1.1 ¡No recibo respuesta! Mi telnet se atascó.

También probé en los navegadores de sitios web HTTP para buscar algo, comprobar en wireshark cómo mi TTL realmente está cambiando a 40, luego, buscar la cadena "ABC" y mi navegador nuevamente se atasca. Huelo la solicitud cambiada a GET pero no recibo respuesta.

Gracias es algo que me da dolor de cabeza y realmente agradecería si alguien con más experiencia me guiara por el camino correcto. Gracias de antemano.

Respuestas a la pregunta(2)

Su respuesta a la pregunta