4

这不仅仅是我想要在这里进行的捕捉。我想首先捕获数据包,然后实时检查特定数据的有效负载,将其删除,注入签名并将数据包重新注入堆栈以像以前一样发送。

我阅读了使用 IPFW 的 ipfw 转移套接字,它看起来很有希望。修改数据包并使用转移套接字将它们重新注入堆栈的示例怎么样?另外,出于好奇,是否可以使用 Java 从套接字读取数据,或者这是否会限制我打包和重新注入等?

4

4 回答 4

4

请参阅转向插座:转向插座 mini HOWTO

它们通过将匹配某个 ipfw 规则的流量传递到一个特殊的原始套接字来工作,然后该套接字可以将更改的流量重新注入网络层。

于 2008-09-15T14:16:20.423 回答
1

如果您只是在寻找数据包捕获,那么 libpcap 非常受欢迎。它用于 tcpdump 和 ethereal 等基本工具。至于“挂钩到堆栈”,除非您计划从根本上改变网络实现方式(即添加您自己的层或更改 TCP 的行为),否则您使用 IPF 进行数据包修改或干预的想法似乎最好的选择。在 Linux 中,他们有一个特定的用户空间模块重定向目标,IPF 可能有类似的东西,或者你可以修改 IPF 来做类似的事情。

如果您只是对查看数据包感兴趣,那么 libpcap 是您的最佳选择。您可以在以下网址找到它:http ://www.tcpdump.org/

于 2008-09-15T14:17:35.617 回答
1

我认为可以使用 QUEUE 或 NFQUEUE iptables 目标在用户空间中执行此操作。客户端应用程序附加到一个队列并接收所有匹配的数据包,它可以在重新注入之前对其进行修改(如果需要,它也可以丢弃它们)。

有一个需要链接的客户端库 libnetfilter_queue。遗憾的是,文档很少,但有一些邮件列表帖子和示例四处流传。

出于性能原因,您不希望对每个数据包都执行​​此操作,而只想对特定匹配的数据包执行此操作,您必须使用标准 iptables 规则对其进行匹配。如果这还不够,您需要编写自己的 netfilter 内核模块。

于 2008-09-20T08:06:26.860 回答
0

我将回应其他推荐 iptables 的响应(取决于您尝试匹配的模式和您想要进行的数据包修改的复杂性) - 直到我注意到问题上的 BSD 标记。

正如Stephen Pellicer已经提到的,libpcap 是捕获数据包的好选择。不过,我相信 libpcap 也可以用来发送数据包。作为参考,我很确定tcpreplay使用它来重播 pcap 格式的文件。

于 2008-09-20T08:52:43.130 回答