问题标签 [packet-mangling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6706 浏览

linux - 除了 iptables 之外的数据包处理工具?

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

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

谢谢你的想法!


久违的更新:

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

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

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

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

0 投票
2 回答
468 浏览

packet - 执行链路层数据包修改的库

是否有一个库可以让我对传入和传出的数据包执行链路层数据包修改?

基本上我想根据传入的 MAC 地址、IP 地址、端口等对数据包进行一些转换(例如更改 IP 有效负载)。我还希望能够对传出的数据包做同样的事情,即修改数据包在他们离开系统之前。

0 投票
3 回答
19226 浏览

python - Python端口转发/多路复用服务器

我想让服务器侦听 UDP 端口 162(SNMP 陷阱),然后将此流量转发给多个客户端。同样重要的是源端口和地址保持不变(地址欺骗)。

我想最好的工具是TwistedScapy或者香草套接字,只是我在 Twisted 的文档中找不到关于源地址欺骗/伪造的任何内容。

有什么解决办法吗?

编辑:添加赏金,mybe iptables 的任何解决方案?

0 投票
1 回答
1077 浏览

winsock - LSP报文修改

有人愿意分享一些关于如何使用 LSP 进行数据包修改的见解吗?

我正在使用非 IFS 子类型,我可以看到(伪?)数据包如何首先进入 WSPRecv。但是我该如何修改它们呢?我的查询是关于一个导致 WSPRecv 被调用 3 次的 HTTP 响应 :((。我需要修改这个响应的几个部分,但由于它分为 3 个部分,因此很难相应地修改它。而且,也许在其他机器上或在不同条件下(例如高流量)只有一个 WSPRecv 调用,或者可能有 10 个调用。解决此问题的最佳方法是什么(请不要 NDIS :D),以及如何正确更改通过增加缓冲区(lpBuffers->buf)?

谢谢

0 投票
4 回答
5793 浏览

python - 发出从 pcap 文件读取数据包的问题。dpkt 模块。是什么赋予了?

我正在运行以下测试脚本来尝试从.pcap我下载的示例文件中读取数据包。它似乎不会运行。我拥有所有模块,但似乎没有运行示例。

由于某种原因,这没有被正确解释。运行它时,我得到

为什么是这样?怎么了?我的安装有问题吗?我在 Mac 上使用 Python 2.6

0 投票
0 回答
174 浏览

winsock - 路由器上的 Winsock LSP 可以修改转发的数据包吗?

如果 Windows 机器充当其他机器的路由器(网关),安装在其上的 Winsock LSP 过滤器是否能够捕获/破坏这些机器的流量?

如果没有,有哪些技术可以做到这一点?

0 投票
1 回答
3883 浏览

packet - 使用 netfilter 队列修改数据包?

我目前正在尝试在用户空间中使用带有 libnetfilter_queue 的代码来修改在 iptables 的 NFQUEUE 目标中排队的数据包。但是,我不知道如何去做。

我已将其设置为使用 NFQNL_COPY_PACKET 复制数据包,如果我要修改复制的数据包,它是否会通过函数 nfq_set_verdict() 自动发送回内核?

此外,我之前曾从 pcap 文件中提取数据包,但是我注意到从 nfq_get_payload() 获得的数据似乎非常不同。有谁知道如何剖析数据?

0 投票
1 回答
1518 浏览

linux - 强制丢包

出于测试目的,为了确定协议实现在存在数据包丢失的情况下如何表现,我想在我的一个网络设备上强制数据包丢失。具体来说,我希望能够将数据包丢失调整在 0% 到 100% 之间的任何位置。我对 iptables 有一点经验,在我看来,我应该能够使用它来实现它,但我做不到。不过,实现 100% 的数据包丢失不是问题;)。关于如何做到这一点的任何想法?

0 投票
2 回答
97 浏览

tcp - netfilter_queue ipv4 可选标头删除

我正在实现基于 netfilter_queue 的用户程序,该程序删除 ipv4 可选标头“时间戳”

ping与这个程序配合得很好,因为它使用ICMP传输。

但是基于 TCP 的应用程序不起作用。我用wireshark检查过,这个程序很好地删除了时间戳。相反,基于 TCP 的应用程序不会为该数据包发送 ACK,并且远程服务器会无限期地重新传输相同的数据包。

TCP数据包处理是否缺少任何程序?我只是修改了 IPv4 标头部分。那为什么tcp传输根本不起作用呢?

我的主要代码是:

iptables 设置为: