Python:使用nfqueue/scapy重写TCP负载中的查询

2024-06-28 18:52:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我绝对不是一个网络专家,所以很明显我在这里遗漏了一些东西。我试图在TCP负载中重写数据库查询。我已经能够让这个在一个单一的场景下工作,但对于其他场景,它不起作用,我不知道为什么。在

开始工作

更改-'select*fromtest1'到'select*fromtest2'

不起作用

更改-'Select*fromtest1'到'Select*fromtest50'

  • 这是不是因为有效载荷的大小改变了?在

下面是我的代码示例:

import nfqueue
from scapy.all import *
import os
import sys

iptable_change = "iptables -A OUTPUT -p tcp --dport 8008 -j NFQUEUE"
os.system(iptable_change)


def callback(payload):
    data = payload.get_data()
    pkt = IP(data)
    if pkt.src == '127.0.0.1':
        if 'test1' in pkt[Raw].load:
            pkt[TCP].payload = str(pkt[TCP].payload).replace("test1", "test50")
            del pkt[IP].chksum
            del pkt[TCP].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()
    except keyboardInterrupt:
        q.unbind(socket.AF_INET)
        q.close()


if __name__ == "__main__":
    main()

我有什么遗漏吗?因为我正在更改数据库查询,所以数据包需要以不同的方式处理吗?在


Tags: import数据库dataifmaincallback场景select
1条回答
网友
1楼 · 发布于 2024-06-28 18:52:34

如果你改变了一个TCP包的长度,那么你必须修正下面的顺序和确认号码。。。这很难。在

如果您需要篡改TCP连接的内容,我建议您只需在连接到您编写的TCP代理(一个简单的TCP服务器,它与原始服务器建立连接并在两个端点之间转发数据)。这样,您就可以让主机的网络堆栈处理TCP序列和确认号。在

相关问题 更多 >