我正在寻找一个 Linux 实用程序,它可以根据一组规则更改网络数据包的有效负载。理想情况下,我会使用iptables和netfilter内核模块,但它们不支持通用有效负载修改:iptables会改变各种header字段(地址、端口、TOS 等),它可以match数据包内的任意字节,但它显然无法alter数据包内的任意数据。
内核模块将是一个很大的优势,因为效率是一个问题,但我很乐意探索任何其他可以完成工作的选项。
感谢您的想法!
迟来的更新:
我们选择使用NFQUEUE模块,这是 Robert Gamble 建议的 QUEUE 模块的最新实现。它看起来相当简单,具有安全性,允许我们的代码在用户空间而不是内核空间中运行。
如果我们只是想改变有效负载而不改变其大小,那么实现几乎是微不足道的。在这种情况下,我们定义一个iptables http://netfilter.org/projects/iptables/index.html规则为我们选择“有趣”的数据包并向它们发送NFQUEUE目标。我们编写一个回调函数来检查来自的数据包NFQUEUE,根据需要修改数据,并重新计算其 TCP 和 IP 标头中的校验和。