我绝对不是一个网络专家,所以很明显我在这里遗漏了一些东西。我试图在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()
我有什么遗漏吗?因为我正在更改数据库查询,所以数据包需要以不同的方式处理吗?在
如果你改变了一个TCP包的长度,那么你必须修正下面的顺序和确认号码。。。这很难。在
如果您需要篡改TCP连接的内容,我建议您只需在连接到您编写的TCP代理(一个简单的TCP服务器,它与原始服务器建立连接并在两个端点之间转发数据)。这样,您就可以让主机的网络堆栈处理TCP序列和确认号。在
相关问题 更多 >
编程相关推荐