当前位置:  开发笔记 > 运维 > 正文

除iptables之外的数据包修改工具?

如何解决《除iptables之外的数据包修改工具?》经验,为你挑选了1个好方法。

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

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

谢谢你的想法!


姗姗来迟的更新:

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

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

但是,我们的用例涉及将其他字符注入数据流.这有一些明显的副作用,即增加TCP流中相应的SEQ/ACK号码,以及使conntrack模块混淆不足以完全破坏NAT 的不那么明显的副作用.经过大量的研究,头脑清理和实验,最方便的解决方案是禁用这些特定数据包的连接跟踪(使用表中的NOTRACK目标raw)并在我们的回调中处理它. 保存你的西红柿,讨厌邮件; 我并不自豪地让你陷入困境,但这是在下一个冰河世纪之前为客户提供可靠产品的唯一途径.这是一个很好的故事.但我真的很感激并分享你的衷心感受.

版本2将通过iptables使用自定义NAT和/或conntrack帮助程序替换我们的回调和若干规则来利用我们新发现的启示.我们相信,当前的练习为我们提供了足够的经验,可以创建一个内核模块,该模块将有机地融入netfilter体系结构中,以解决我们遇到的问题.

再次感谢您的关注和建议!



1> Robert Gambl..:

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

该libipq手册页包含关于如何使用这个细节,并提供了一个简单的例子.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有