Python Scapy nfqueue

时间:2013-03-14 18:17:52

标签: python linux iptables scapy

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

修改功能是我创建新数据包并将其返回的地方。

1 个答案:

答案 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