我想问一下是否有一种方法可以捕获即将通过网络从我的计算机发送到其他人的数据包..是否可以使用一些java库来设计这样的东西?
编辑我不想要一个程序..我想要一种方法来创建这样一个程序,用java编写......我可以用jpcap发送数据包但我不想创建数据包,我想获取我的计算机将发送的数据包并在发送之前对其进行编辑。
我想问一下是否有一种方法可以捕获即将通过网络从我的计算机发送到其他人的数据包..是否可以使用一些java库来设计这样的东西?
编辑我不想要一个程序..我想要一种方法来创建这样一个程序,用java编写......我可以用jpcap发送数据包但我不想创建数据包,我想获取我的计算机将发送的数据包并在发送之前对其进行编辑。
在 Linux(即 Linux 内核)中,您的目标并不那么容易实现……但您可以使用与软件嗅探相同的技术:即隧道。通过这种方式,您可以拦截所有发送的数据包(由您的应用程序),因此您可以修改/更改它们(就像 sniffjoke 一样)。为了帮助您,有一个名为 janus ( https://github.com/evilaliv3/janus )的项目(开源),它覆盖了实际的路由表,创建了一个假网关,旨在阻止内核之后的数据包(在传出流量)和内核之前(传入流量)。
我想,理论上,您可以创建一个替代的“SocketImpl”类,并通过将自定义套接字工厂配置为默认值来配置您的应用程序以使用它。这种方法不能捕获 TCP/IP 数据包,但它可以在数据写入操作系统级套接字之前捕获数据。
如果您想捕获网络数据包并在通过的过程中对其进行编辑,您可能需要使用主机操作系统的 IP 过滤基础设施。它将是不可移植的,技术上很复杂,并且在配置方面很麻烦。如果您尝试在 Java 中实现它(使用 JNI 或 JNA),则更是如此。
(AFAIK,Wireshark 之类的工具只允许您查看数据包及其中的内容。它们无法更改数据包。)