我编写python代码与linux系统上的iptables nfqueue进行交互。我能够检索队列数据包并按照我的意愿修改它们,但是我无法通过队列接受它们。
payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(p), len(p))
这就是我理解的那条线将允许它通过队列。 p是我创建的新数据包,有效负载是原始队列数据包。
真的没有太多的文档,所以任何帮助将不胜感激。 感谢
这是我创建数据包的方式
def queue_callback(i, payload)
data = payload.get_data()
packet = IP(data)
这是我创建数据包的地方。我做了一些数据包操作,这是我返回的地方
packet[TCP].payload = after;
return packet;
我返回数据包后,尝试使用上一个命令
更新iptables中的nfqueue p = modify(packet)
print p[TCP].payload
payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(p), len(p))
修改功能是我创建新数据包并将其返回的地方。
答案 0 :(得分:0)
我不明白你在哪里修改数据包。通常,您的数据包操作应该在回调函数中:
def cb(payload):
data = payload.get_data()
p = IP(data)
#Here you can manipulate the packet and modify it as you want
p[IP].src = "10.2.0.2" #change the src address for exemple
payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(p), len(p))
然后在创建队列后调用回调函数:
q.set_callback(cb)
q = nfqueue.queue()
q.open()
q.create_queue(0) #Same queue number of the iptables rule