3

能够发送和接收原始网络数据包的最简单方法是什么。我是否必须编写自己的一些 c API 的 JNI 包装,在这种情况下,我要寻找什么 API?

编辑:我希望能够做wireshark 所做的事情,即在接口上记录所有传入的数据包,此外还能够发回我自己创建的数据包。我想在mac上做。

4

5 回答 5

1

如果您从需要类似数据包嗅探器的想法开始,您需要查看http://netresearch.ics.uci.edu/kfujii/jpcap/doc/

于 2008-09-05T18:28:37.593 回答
1

Raw Socket for Java 是长期对 JDK 的请求。请参阅此处的请求。那里有很长的讨论,您可以在其中寻找解决方法和解决方案。我曾经需要它来进行简单的 PING 操作,但我不记得我是如何解决这个问题的。对不起 :)

于 2008-09-05T18:47:05.067 回答
1

到目前为止,我最好的选择似乎是BPF api 并编写一个薄的 JNI 包装器

于 2008-09-05T20:51:28.467 回答
0

TINI是一个 java 以太网控制器,它可能具有用于直接访问从以太网帧到 TCP 流的数据的库和类。您也许可以在其中找到实现所需类的东西。如果没有,应该有指针或用户组可以让您领先一步。

于 2008-09-02T17:22:46.610 回答
0

您无法从纯 Java 访问原始套接字,因此您需要在 Java 代码和网络接口之间设置某种层。

另请注意,对原始套接字的访问通常仅适用于“根”进程,否则任何用户都可以 a) 嗅探所有流量,以及 b) 生成欺骗数据包。

与其编写整个程序以使其需要以“root”身份运行,不如考虑在具有某种 IPC(RMI、命名管道、TCP 套接字等)的独立程序中完成数据包捕获和生成,以交换Java 应用程序的数据。

于 2008-09-22T12:49:46.273 回答