我必须在Linux系统上进行数据包检查,修改,丢弃和注入数据包。理想情况下,这也将出现在用户空间以及IP数据包和以太网帧上。
不幸的是,我不能为此开放OpenSource,这基本上排除了基于NFQUEUE
和libnetfilter_queue
的任何方法,因为所有netfilter
(和他们的狗)都只是GPL。
我想通过简单地调用netfilter
来同时使用TAP / TUN设备来控制iptables
,但这似乎充其量只是凌乱......
那么,netfilter
还有其他选择吗?
答案 0 :(得分:1)
我认为您的问题是libnetfilter
受GPLv2许可(不是LGPL)的约束,因此构建这些许可的任何项目也将受GPLv2许可的约束;这是你想要避免的(我认为)。
另一种方法是使用不受GPLv2许可证约束的语言绑定。一个候选人似乎是Go绑定 - 例如,参见here,这似乎是在Apache许可下。我显然没有检查其中每个文件的来源。另一种方法是将您的应用程序分成两部分 - 一个与Netfilter通信的小层,通过(例如)RPC接口与您的应用程序的其余部分进行通信。
但是,上次我遇到这个时,我使用了libpcap
代替了BSD许可。一个鲜为人知的事实是libpcap
可以发送原始数据包并接收它们。但是,它比netfilter低得多 - 你得到原始数据包就是这样。
答案 1 :(得分:-1)
许可证不适用于您的用户空间应用程序。