linux - 除 iptables 外的数据包处理实用程序?

标签 linux networking iptables packet-mangling

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




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

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

谢谢你的想法!

久违的更新:

我们选择使用 NFQUEUE模块,这是 Robert Gamble 建议的 QUEUE 模块的最新实现。它看起来相当简单,具有安全优势,允许我们的代码在用户空间而不是内核空间中运行。

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

但是,我们的用例涉及向数据流中注入(inject)额外的字符。这具有在TCP流中增加相应的SEQ/ACK编号的比较明显的副作用,以及混淆 conntrack 的不那么明显的副作用。模块足以完全破坏 NAT。经过大量研究、头疼和实验,最方便的解决方案是禁用这些特定数据包的连接跟踪(使用 NOTRACK 表中的 raw 目标)并在我们的回调中处理它。保存您的西红柿和讨厌的邮件;我一点也不自豪让您了解引擎盖,但这是在下一个冰河时代之前向客户提供可靠产品的唯一途径。这是一个好故事。但我真的很感激并分享你的衷心感受。

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

最佳答案

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

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

关于linux - 除 iptables 外的数据包处理实用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260757/

相关文章:

java - JBoss 配置

linux - 打包程序选项以避免在 shell 配置时发出警告

c - TCP 连接 - 延迟 close() 和 RST

android - 为什么我的服务总是绑定(bind)到 ipv6 localhost 而不是 ipv4?

python - cv2.videoCapture() 总是返回 false,也是 skvideo.io.VideoCapture()

linux - 为什么这个 bash 脚本获取 http header

mysql - 如何从 NetBeans 连接到 MySQL

java - 在 spring boot 中运行多个 Tomcat 实例?

linux - 用于读取日志的 IP 表脚本

linux - Iptables:重定向到端口 8080 并仅接受一个 IP 地址