JavaのDHCPクライアント、IP 0.0.0.0から送信できません
質問
Javaを使用してDHCPクライアントを作成しようとしています。クライアントは、発見を送信し、オファーを受け取り、リクエストを送信し、ACKを受け取ります。ただし、ディスバーとリクエストUDP Datagrampacketsを送信する場合、DHCPのポイントはDHCPサーバーから使用可能なIPアドレスを受信することだからです。ただし、ソケットを0.0.0.0にバインドすると、 http://download.oracle.com/javase/6/docs/api/net/datagramsocket.html Javaリファレンス、カーネルはソケットにIPアドレスを割り当てます。
イーサネットカードのIPアドレスを強制的に設定すると、
$ sudo ifconfig en0 0.0.0.0
そして、私のパケットを送信します。私はaを受け取ります
java.io.IOException: Can't assign requested address
例外。
0.0.0.0からUDPパケットを送信して設定する方法はありますか System.exec()
(必要に応じて)Javaを使用してDHCPサーバーから受信したIPアドレス?
解決
このライブラリを使用してDHCPを実行できない可能性があります。ライブラリは、DHCPがIPアドレスをそこに配置してはならないことを指定している場合でも、送信者アドレスとして0.0.0.0を使用したくないと想定しています。 RFCをスキャンするだけで、「送信者フィールドに記入してはならない」ことを示しているようです。それはただ無視される可能性はありますか? DHCPはすべて放送されているため、問題はなく、何でも記入することができます。 Wiresharkまたは別のパケットスニファーでDHCPリクエストを聞いて、本当に0.0.0.0かどうかを確認しましたか?
データグラムを下位レベルで作成する必要がある場合があります。
データグラムソケットを使用している場合、自分のIPアドレスがどのように設定されているかは問題ではないと思います。これは、0.0.0.0を割り当てようとするとライブラリが変更されるためです。
編集:DHClientソースの一部をスキャンしました。その巨大でわかりませんが、Ifconfigを使用してインターフェイスを構成するためにシェルスクリプトを使用しているようです。そのため、質問のその部分に答えるかもしれません。そのため、IFConfigを使用して、今のようにIPアドレスを変更できます。
他のヒント
0.0.0.0は、ローカルネットワーク全体を表すIPです。ネットワークカードをバインドすることはできません。パケットをブロードキャストIP 255.255.255.255にのみ送信できます。