Измените полезную нагрузку TCP с помощью nfqueue / scapy

Здравствуйте, я использую nfqueue и scapy, и моя цель - получить пакеты в моем NFQUEUE, изменить полезную нагрузку и отправить их снова.

Я могу изменить такие поля, как TTL, без каких-либо проблем, но когда дело доходит до изменения полезной нагрузки, я сталкиваюсь с проблемами.

Когда я меняю полезную нагрузку, я анализирую пакет с помощью wireshark и, очевидно, отправляю пакет с измененной полезной нагрузкой, но сервер не отвечает.

Это мой код:

#!/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()

Я установил это правило для исходящего трафика на порт 80:iptables -I OUTPUT -s 192.168.1.10 -p tcp --dport 80 -j NFQUEUE

И, чтобы проверить это, например, я открываю telnet на порт Google 80, сделатьGET / HTTP/1.1 и вот что я вижу:

TTL: 40
DATA: GET / HTTP/1.1

Теперь, если я сделаюABC / HTTP/1.1 Я не получил ответа! Мой телнет просто застрял.

Я также пытался на браузерах HTTP-сайтов что-то просматривать, проверять на wireshark, как мой TTL действительно меняется на 40, затем просматривал строку «ABC», и мой браузер снова зависал. Я понюхал запрос, измененный на GET, но не получил ответа.

Спасибо, отчасти вызывает у меня головную боль, и я был бы очень признателен, если бы кто-то с большим опытом мог привести меня на правильный путь. Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос