Mac 上で Java から生の IP パケットを読み書きするにはどうすればよいですか?
-
09-06-2019 - |
質問
生のネットワーク パケットを送受信できるようにする最も簡単な方法は何でしょうか。いくつかの c API の独自の JNI ラッピングを作成する必要がありますか?その場合、どの API を探しているのでしょうか?
編集:Wireshark が行うことをできるようにしたいのです。インターフェイス上のすべての受信パケットを記録し、さらに自分で作成したパケットを送り返すこともできます。そしてそれをMacでもやりたいと思っています。
解決
何かが必要だという考えから始めると のように パケットスニファー、見てみるといいでしょう http://netresearch.ics.uci.edu/kFujii/jpcap/doc/.
他のヒント
Raw Socket for Java は、長い間 JDK に対するリクエストでした。リクエストを見る ここ. 。そこでは、回避策や解決策を探すための長い議論が行われています。以前、単純な PING 操作にこれが必要だったのですが、これをどのように解決したか思い出せません。ごめん :)
これまでのところ私の最善の策は次のとおりです BPF API を使用して薄い JNI ラッパーを作成します。
Pure Java から生のソケットにアクセスすることはできないため、Java コードとネットワーク インターフェイスの間に何らかの層が必要になります。
また、生のソケットへのアクセスは、通常、「ルート」プロセスのみが利用できることにも注意してください。それ以外の場合、すべてのユーザーが a) すべてのトラフィックを傍受し、b) スプーフィングされたパケットを生成する可能性があるからです。
「root」として実行する必要があるようにプログラム全体を作成するのではなく、ある種の IPC (RMI、名前付きパイプ、TCP ソケットなど) を使用してスタンドアロン プログラムでパケットのキャプチャと生成を実行し、パケットを交換することを検討することもできます。 Java アプリでデータを保存します。
ティニ Java イーサネット コントローラーであり、イーサネット フレームから TCP ストリームへのデータに直接アクセスするためのライブラリとクラスが含まれる場合があります。必要なクラスを実装するものが見つかるかもしれません。そうでない場合は、有利なスタートを切るための指針やユーザー グループがあるはずです。