python - Linux libnetfilter_queue延迟包问题

标签 python linux networking netfilter

我必须使用 Linux 内核 libnetfilter_queue(准确地说是 python 绑定(bind))和 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 版本,并将数据包复制到程序中的缓冲区,然后发出 DROP 判决。在与您的延迟相关的超时后,我使用原始套接字重新注入(inject)数据包。这工作正常,而且似乎非常有效。

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

关于python - Linux libnetfilter_queue延迟包问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237536/

相关文章:

java - 请求-响应消息格式和算法设计

python - python-weka 包装器中的运行时错误

ubuntu - 通过网桥为容器分配静态 IP

python - mac 和 python 相对路径中的 Selenium chromedriver

linux - Redis "--protected-mode no"磁盘上没有持久数据

swift 3.1.1.-在 linux copyItem 上发布(atPath :toPath:) is not yet implemented

linux - 如何复制一个巨型文件的前几行,并使用一些 Linux 命令在其末尾添加一行文本?

GKE 上的 nginx-ingress 无法路由到配置服务的路径

python - UUID4 的较短版本

python - 在 unittest.main() 之后执行命令