我正在开展一个项目,以提供在网络连接生命周期的各个阶段拦截源自 Linux 机器并进入 Linux 机器的网络连接的能力。
这些阶段包括:
- 就在建立出站网络连接之前 - 即当第一个 SYN 数据包发出时。
- 就在建立出站网络连接之后。
- 就在连接终止之后。
- 建立入站连接时 - 即从外部接收到第一个 SYN 数据包时。
对于上述要求,我正在评估 netfilter_queue 以获取用户空间中的数据包,然后决定是否允许或丢弃数据包。
我主要关心的是,一旦我完成了 netfilter_queue 注册,我将开始获取所有数据包。但我只对控制数据包感兴趣,不希望将数据包发送到用户空间。
所以,我的问题是 - 有没有现有的方法来告诉 netfilter_queue 内核模块只发送控制包而不发送数据包?另外,是否有可能收到有关连接建立和终止的通知?
如果没有现成的方法来实现上述目标,那么修改 libnfnetfilter_queue 和 netfilter_queue 内核模块以根据配置模式集仅提供控制数据包是否有意义,即引入 NFQNL_COPY_CONTROL_PACKET 仅将控制数据包复制到用户空间?
抱歉,如果我的问题看起来很幼稚,因为我仍在探索 netfilter_queue。
我也在 netfilter 邮件列表上发布了同样的问题,但到目前为止没有得到回复:(
感谢所有的帮助。
高拉夫