如何在Mac上从Java读写原始IP数据包?

时间:2020-03-05 18:46:35  来源:igfitidea点击:

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

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

解决方案

回答

TINI是一个Java以太网控制器,它可能具有用于直接从以太网帧访问数据流到TCP流的库和类。我们可能可以在其中找到实现所需类的内容。如果没有,应该有一些指针或者用户组来带给我们一个良好的开端。

-亚当

回答

如果我们以需要诸如数据包嗅探器之类的想法开始,那么我们将需要查看http://netresearch.ics.uci.edu/kfujii/jpcap/doc/。

回答

Java的原始套接字是对JDK的长期要求。请参阅此处的请求。那里有很长的讨论,我们可以在其中寻找解决方法和解决方案。我曾经需要一个简单的PING操作,但是我不记得我是如何解决的。对不起 :)

回答

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

回答

我们无法从纯Java访问原始套接字,因此我们将需要在Java代码和网络接口之间进行某种分层。

还要注意,通常只对"根"进程提供对原始套接字的访问,因为否则,任何用户都可以a)嗅探所有流量,以及b)生成欺骗性的数据包。

我们可以考虑在独立的程序中使用某种IPC(RMI,命名管道,TCP套接字等)完成数据包的捕获和生成,而不是编写整个程序以使其需要以" root"身份运行。 Java应用程序访问数据。