1

Javaを使用してDHCPクライアントを作成しようとしています。クライアントは、Discoverを送信し、オファーを受信し、リクエストを送信し、Ackを受信します。ただし、ディスクバーと要求UDP DatagramPacketsを送信する場合、DHCPのポイントはDHCPサーバーから使用可能なIPアドレスを受信することであるため、IP0.0.0.0ポート68から送信する必要があります。ただし、 http://download.oracle.com/javase/6/docs/api/java/net/DatagramSocket.html Javaリファレンスによると、ソケットを0.0.0.0にバインドすると、カーネルはIPを割り当てます。ソケットへのアドレス。

イーサネットカードのIPアドレスを0.0.0.0に強制的に設定した場合

$ sudo ifconfig en0 0.0.0.0  

パケットを送信します。私は受け取ります

java.io.IOException: Can't assign requested address

例外。

0.0.0.0からUDPパケットを送信し、System.exec()Javaを使用してDHCPサーバーから受信したIPアドレスを(必要に応じて)設定する方法はありますか?

4

2 に答える 2

1

このライブラリを使用してDHCPを実行できない可能性があります。ライブラリは、DHCPがIPアドレスをそこに配置するべきではないと指定している場合でも、送信者アドレスとして0.0.0.0を使用したくないと想定しています。RFCをスキャンするだけで、「送信者フィールドに入力するべきではない」ことを示しているようです。無視される可能性はありますか?DHCPはすべてブロードキャストされているので、問題はなく、何でも入力できます。Wiresharkまたは別のパケットスニファでDHCP要求をリッスンして、実際に0.0.0.0かどうかを確認しましたか?

下位レベルでデータグラムを作成する必要がある場合があります。

DatagramSocketを使用している場合、自分のIPアドレスがどのように設定されているかは問題ではないと思います。これは、0.0.0.0を割り当てようとすると、ライブラリによってIPアドレスが変更されるためです。

編集:dhclientソースの一部をスキャンしましたが、その巨大で理解できませんが、シェルスクリプトを使用してifconfigを使用してインターフェイスを構成しているようです。だからそれは質問のその部分に答えるかもしれません。したがって、ifconfigを使用して、現在のようにIPアドレスを変更できます。

于 2011-07-25T14:50:13.310 に答える
0

0.0.0.0は、ローカルネットワーク全体を表すIPです。ネットワークカードをそれにバインドすることはできません。パケットを送信できるのはブロードキャストIP255.255.255.255のみです。

于 2011-07-25T14:35:33.150 に答える