Linux libnetfilter_队列延迟数据包问题

2024-06-02 08:20:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须使用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()发送副本?在

谢谢你


Tags: 函数queuelinuxdefsocket数据包内核payload
2条回答

很抱歉迟了回复,但我需要做这样的事情,虽然稍微复杂一些。我使用了这个库的C版本,并将数据包复制到程序内部的一个缓冲区,然后发出了一个删除判决。在与延迟相关的超时之后,我使用原始套接字重新插入数据包。这个工作很好,而且似乎很有效率。在

我想你撞车的原因是因为你没有很快做出判决。在

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

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

相关问题 更多 >