【发布时间】:2010-09-07 14:10:07
【问题描述】:
发送和接收原始网络数据包的最简单方法是什么。我是否必须为某些 c API 编写自己的 JNI 包装,在这种情况下,我要寻找什么 API?
编辑:我希望能够做wireshark 所做的事情,即在接口上记录所有传入的数据包,此外还能够发回我自己创建的数据包。我想在 Mac 上做。
【问题讨论】:
标签: java macos networking
发送和接收原始网络数据包的最简单方法是什么。我是否必须为某些 c API 编写自己的 JNI 包装,在这种情况下,我要寻找什么 API?
编辑:我希望能够做wireshark 所做的事情,即在接口上记录所有传入的数据包,此外还能够发回我自己创建的数据包。我想在 Mac 上做。
【问题讨论】:
标签: java macos networking
如果您从需要类似数据包嗅探器的想法开始,您会想要查看http://netresearch.ics.uci.edu/kfujii/jpcap/doc/。
【讨论】:
到目前为止,我最好的选择似乎是 BPF api 并编写一个精简的 JNI 包装器
【讨论】:
Raw Socket for Java 是长期对 JDK 的请求。请参阅请求here。那里有很长的讨论,您可以在其中寻找解决方法和解决方案。我曾经需要它来进行简单的 PING 操作,但我不记得我是如何解决这个问题的。对不起:)
【讨论】:
您无法从纯 Java 访问原始套接字,因此您需要在 Java 代码和网络接口之间设置某种层。
另请注意,对原始套接字的访问通常仅适用于“根”进程,否则任何用户都可以 a) 嗅探所有流量,以及 b) 生成欺骗数据包。
与其编写整个程序以使其需要以“root”身份运行,不如考虑在具有某种 IPC(RMI、命名管道、TCP 套接字等)的独立程序中完成数据包捕获和生成与您的 Java 应用交换数据。
【讨论】:
TINI 是一个 java 以太网控制器,它可能具有用于直接访问从以太网帧到 TCP 流的数据的库和类。您也许可以在其中找到实现所需类的东西。如果没有,应该有指针或用户组可以让您领先一步。
【讨论】: