Java上的DHCP客户端,无法从IP 0.0.0.0发送

时间:2011-07-25 14:27:22

标签: java client udp ip dhcp

我正在尝试使用Java创建DHCP客户端。 客户端将发送Discover,接收要约,发送请求并接收Ack。 但是,当发送discver和请求UDP DatagramPackets时,我需要从IP 0.0.0.0端口68发送它们,因为DHCP的目的是从DHCP服务器接收可用的IP地址。 但是,如果我将套接字绑定到0.0.0.0,根据http://download.oracle.com/javase/6/docs/api/java/net/DatagramSocket.html Java Reference,内核将为套接字分配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地址?

2 个答案:

答案 0 :(得分:1)

可能您将无法使用此库来执行DHCP。该库假定您不希望使用0.0.0.0作为发送方地址,即使DHCP指定您不应该在其中放置IP地址。只是扫描RFC,似乎表明你“不应该填写发件人字段”。是否有可能被忽略?可能因为DHCP全部是广播,所以无关紧要,您可以填写任何内容。您是否尝试在Wireshark或其他数据包嗅探器上侦听DHCP请求以查看它是否真的为0.0.0.0?

您可能需要在较低级别构建数据报。

如果您使用的是DatagramSocket,我认为如何设置您自己的IP地址并不重要,因为如果您尝试分配0.0.0.0,库将会更改它。

编辑: 我扫描了dhclient源代码的部分内容,而且它很大,我不明白,但看起来他们正在使用shell脚本来使用ifconfig配置接口。所以这可以回答问题的这一部分。因此,您可以像现在一样使用ifconfig更改IP地址。

答案 1 :(得分:0)

0.0.0.0是代表整个本地网络的ip。你不能绑定你的网卡,你只能发送数据包的广播IP 255.255.255.255