如何在mac上从java读取和写入原始ip包?

时间:2008-09-02 17:01:29

标签: java macos networking

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

编辑:我希望能够做到wireshark所做的事情,即记录接口上的所有数据包,并且还能够发回我自己创建的数据包。我想在Mac上做这件事。

5 个答案:

答案 0 :(得分:1)

如果您首先想要的是喜欢数据包嗅探器,那么您需要查看http://netresearch.ics.uci.edu/kfujii/jpcap/doc/

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

TINI是一个java以太网控制器,它可能有用于直接访问从以太网帧到TCP流的数据的库和类。您可以在那里找到实现所需课程的内容。如果没有,应该有指针或用户组,这将为您提供一个良好的开端。

答案 4 :(得分:0)

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

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

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