linux – 除了iptables之外的数据包管理工具?

我正在寻找可以根据一组规则改变网络数据包的有效内容linux实用程序.理想情况下,我会使用iptables和netfilter内核模块,但它们不支持通用的有效负载调整:iptables会改变各种头域(地址,端口,TOS等),并且可以匹配数据包中的任意字节,但是它显然无法改变数据包内的任意数据.

内核模块将是一个很大的优势,因为效率是一个问题,但我很乐意探索任何其他可以完成工作的选项.

谢谢你的想法!

逾期更新:

我们选择使用NFQUEUE模块,这是Robert Gamble建议的QUEUE模块的最新实现.这似乎是相当简单的,有一个安全的奖金,允许我们的代码运行在用户,而不是内核,空间.

如果我们只想改变有效载荷而不改变它的大小,这个实现将是微不足道的.在这种情况下,我们定义一个iptables规则来为我们选择“有趣的”数据包,并向他们发送一个NFQUEUE目标.我们将编写一个回调函数,它将检查来自NFQUEUE的数据包,根据需要修改数据,并重新计算其TCP和IP头中的校验和.

但是,我们的用例涉及将额外的字符注入到数据流中.这具有增加TCP流中对应的SEQ / ACK号码的一些明显的副作用,并且将conntrack模块混淆的不太明显的副作用足以完全破坏NAT.经过大量研究,头痛和实验后,最方便的解决方案是禁用这些特定数据包(原始表中的NOTRACK目标)的连接跟踪,并在我们的回调中处理它.保存你的西红柿和仇恨邮件;我不敢为你提供让人感到自豪的地方,但这是在下一个冰河时代之前为客户提供可靠产品的唯一途径.这是一个很好的故事.但我真的很感激,分享你的衷心情绪.

版本2将通过使用自定义NAT和/或conntrack helper替换我们的回调和几个iptables规则来利用我们的新发现启发.我们相信,目前的练习给了我们足够的经验来创建一个可以有机地适应netfilter架构的内核模块解决我们遇到的问题.

再次感谢您的兴趣和建议!

解决方法

我没有使用它,但 QUEUE netfilter目标看起来像它可能工作.它使用nflink套接字和注册套接字的用户空间应用程序来执行有效负载修改.

libipq手册页包含有关如何使用的详细信息,并提供了一个简单的例子.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...