Javaを使用してDHCPクライアントを作成しようとしています。 クライアントはディスカバーを送信し、オファーを受け取り、リクエストを送信し、Ackを受信します。 しかし、ディスクバーと要求UDP DatagramPacketsを送信する場合、DHCPのポイントはDHCPサーバーから使用可能なIPアドレスを受け取ることであるため、IP 0.0.0.0ポート68からそれらを送信する必要があります。 しかし、ソケットを0.0.0.0にバインドすると、Javaリファレンスのhttp://download.oracle.com/javase/6/docs/api/java/net/DatagramSocket.htmlによれば、カーネルはソケットにIPアドレスを割り当てます。JavaのDHCPクライアント、IPから送信できません0.0.0.0
私は
$ sudo ifconfig en0 0.0.0.0
を経由して0.0.0.0に私のイーサネットカードのIPアドレスを設定し、自分のパケットを送信する強制した場合、受け取ったのは
java.io.IOException: Can't assign requested address
例外です。
UDPパケットを0.0.0.0から送信し、System.exec()
(必要な場合)を使用して、Javaを使用してDHCPサーバーから受信したIPアドレスを設定しますか?
また、DHCPクライアントのIPアドレスを設定する必要があるため、JavaコードからIPアドレスを設定する方法を見つけ出す必要があります.Ooops、私はあなたの最後の部分を見逃しました質問。あなたはそれをより良くするために編集したいかもしれません。 –
私はWiresharkをチェックし、実際のDHCPクライアントは0.0.0.0からパケットを送りますが、私が作成したクライアントは現在割り当てられているアドレスから送信しています....だから、私はおそらくCでプログラムするべきだと思いますか? ) – Heartinpiece
Javaはあなたに必要な柔軟性を提供すると確信していますが、私はあなたがそれを行う必要があるかどうかはわかりません。 DatagramSocketを使用するのではなく、Socket(http://download.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html)を使用することができます。あなたはDatagramSocketがUDPを行うように設定するようなことをしなければなりません。残念なことに、私はJavaでそれをしていない、Cのみ、私は推測だ。しかし、私はJavaがそれを処理できるはずだと思います。 –