【问题标题】:Linux libnetfilter_queue delayed packet problemLinux libnetfilter_queue 延迟数据包问题
【发布时间】:2011-06-04 15:14:46
【问题描述】:

我必须使用 Linux 内核 libnetfilter_queue(确切地说是 python 绑定)和 dpkt 过滤和修改网络流量,并且我正在尝试实现延迟数据包转发。

普通过滤效果很好,但如果我尝试使用这样的功能延迟数据包

def setVerdict(pkt, nf_payload):
    nf_payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))


t = threading.Timer(10, setVerdict, [pkt, nf_payload])
t.start() 

它不会抛出异常而崩溃(肯定是低级崩溃)。我可以像这样直接使用 libnetfilter 实现延迟,还是必须复制 pkt,删除它并使用标准 socket.socket.send() 发送副本?

谢谢

【问题讨论】:

    标签: python linux networking netfilter


    【解决方案1】:

    很抱歉回复晚了,但我需要做这样的事情,虽然稍微复杂一些。我使用库的 C 版本并将数据包复制到程序内的缓冲区,然后发出 DROP 判决。在与您的延迟相关的超时后,我使用原始套接字重新注入数据包。这很好用,而且看起来很有效。

    我认为你崩溃的原因是你没有足够快地做出判决。

    【讨论】:

    • 拜托,你能为这个答案提供一些示例代码吗?关于 libnetfilter_queue 的文档非常少。
    【解决方案2】:

    我无法回答你的问题,但是为什么不使用传出接口上的“netem”流量队列模块来延迟数据包呢?

    可以配置 tc 队列以对以某种方式“标记”的数据包应用不同的策略;标记此类数据包的常规方法是使用 netfilter 模块(例如 iptables 或 nfqueue)。

    【讨论】:

    • 我必须使用 libnetfilter_queue :|
    猜你喜欢
    • 2010-10-11
    • 2011-02-10
    • 2011-01-14
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多