0

我正在编写 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))

修改功能是我创建一个新数据包并返回它的地方。

4

1 回答 1

1

我不明白你在哪里修改数据包。通常你的数据包操作应该在回调函数中:

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
于 2014-04-02T15:20:48.960 回答