在通过网络发送之前捕获我的数据包

时间:2011-05-19 09:58:02

标签: java packet-capture

我想问一下是否有办法捕获即将通过网络从我的计算机发送给其他人的数据包。是否可以使用某些Java库来设计这样的数据?


编辑 我不想要一个程序..我想要一种方法来创建这样的程序,用java编写...我可以用jpcap发送数据包但我不想创建数据包,我想拿我的计算机将发送的数据包在发送之前编辑它们。

2 个答案:

答案 0 :(得分:1)

在Linux(即Linux内核)中,您的目标并不容易实现......但您可以使用软件sniffjoke使用的相同技术:即隧道。通过这种方式,您可以拦截所有发送的数据包(由您的应用程序),因此您可以修改/更改它们(就像sniffjoke一样)。为了帮助你有一个名为janus(https://github.com/evilaliv3/janus)的项目(开源),它会覆盖实际的路由表,创建一个假网关,目的是在内核之后(在传出流量上)和内核之前阻塞数据包(关于来电)。

答案 1 :(得分:0)

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

如果您想要捕获网络数据包并在途中编辑它们,您可能需要使用主机操作系统IP过滤基础设施。它将是不可移植的,技术上复杂的,并且要配置下层区域的痛苦。如果你尝试用Java实现它(使用JNI或JNA),那就更是如此。

(AFAIK,像Wireshark这样的工具只允许你看到数据包及其中的内容。他们can't change the packets。)