我必须使用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()
发送副本?在
谢谢你
很抱歉迟了回复,但我需要做这样的事情,虽然稍微复杂一些。我使用了这个库的C版本,并将数据包复制到程序内部的一个缓冲区,然后发出了一个删除判决。在与延迟相关的超时之后,我使用原始套接字重新插入数据包。这个工作很好,而且似乎很有效率。在
我想你撞车的原因是因为你没有很快做出判决。在
我不能回答您的问题,但为什么不使用传出接口上的“netem”流量队列模块来延迟数据包呢?在
可以配置tc队列以将不同的策略应用于以某种方式“标记”的包;标记此类包的常规方法是使用netfilter模块(例如iptables或nfqueue)。在
相关问题 更多 >
编程相关推荐