2011-05-19 76 views
0

我想问一下如果有一种方法可以捕获数据包,即将通过网络从我的计算机发送给其他人。是否可以用一些java库来设计那样吗?在通过网络发送之前捕获我的数据包


编辑 我不想程序..我想一个方法来创建这样一个程序,用Java编写的......我可以JPCAP发送数据包,但我不希望创建的包,我想取出我的电脑发送的数据包并在发送之前编辑它们。

回答

0

我想在理论上,你可以创建一个替代的“SocketImpl”类,并配置你的应用程序使用它通过配置一个自定义套接字工厂作为默认值。这种方法无法捕获TCP/IP数据包,但它可以在将数据写入OS级套接字之前捕获这些数据。

如果您想捕获网络数据包并在途中编辑它们,您可能需要使用主机OS的IP过滤基础结构。这将是不可移植的,技术上复杂的,并且在下面的区域配置会很痛苦。更甚者,如果你尝试用Java实现它(使用JNI或JNA)。

(据我所知,像Wireshark的工具只让你看到的数据包,什么在他们,他们can't change the packets

1

在Linux操作系统(即Linux内核),你的目标是不那么容易才达到...但您可以使用软件sniffjoke使用的相同技术:即隧道。通过这种方式,您可以拦截所有发送的数据包(通过您的应用程序),因此您可以修改/更改它们(就像sniffjoke一样)。为了帮助你,有一个名为janus(https://github.com/evilaliv3/janus)的项目(开放源代码),它覆盖了实际的路由表,创建了一个伪造的网关,目的是在内核之后(在外出流量上)和内核之前)。

相关问题