Измените полезную нагрузку 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, но не получил ответа.
Спасибо, отчасти вызывает у меня головную боль, и я был бы очень признателен, если бы кто-то с большим опытом мог привести меня на правильный путь. Заранее спасибо.