我必须在Linux系统上进行数据包检查、损坏、丢弃和注入。理想情况下,这将是在用户空间,在IP包和以太网帧,也。
不幸的是,我不能使用opensource来实现这一点,它基本上排除了基于NFQUEUE
和libnetfilter_queue
的任何方法,因为所有的netfilter
(和它们的狗)都是gpl。
我曾考虑过使用tap/tun设备来并行控制netfilter
,只需调用iptables
,但这看起来最多是一团糟……
那么,除了netfilter
,还有其他选择吗?
最佳答案
我相信您的问题是libnetfilter
需要遵守gplv2许可证(而不是lgpl),因此在此基础上建造的任何项目也需要遵守gplv2许可证;这是您想要避免的(我认为)。
另一种选择是使用不受gplv2许可证约束的语言绑定。一个候选者可能是go绑定-例如,请参见here,它似乎在apache许可下。我显然没有检查其中每一份文件的出处。另一种方法是将应用程序分为两层-一个与netfilter通信的小层,通过(例如)rpc接口与应用程序的其余部分通信。
然而,上一次我面对这个问题时,我使用了libpcap
,这是bsd许可的。一个鲜为人知的事实是libpcap
可以发送原始数据包,也可以接收它们。然而,它的级别比netfilter低得多——你得到了原始数据包,就这样了。
关于linux - 没有GPL的数据包注入(inject),过滤和处理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16398711/