我正在尝试使用Java创建DHCP客户端。 客户将发送发现,接收要约,发送请求和接收确认。 但是,在发送光盘和请求UDP DatagramPackets时,我需要从IP 0.0.0.0端口68发送它们,因为DHCP的重点是从DHCP服务器接收可用的IP地址。 但是,如果根据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地址?

===============>>#1 票数: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地址。

===============>>#2 票数:0

0.0.0.0是代表整个局域网的ip。 您无法将网卡与其绑定,只能将数据包发送到其广播IP 255.255.255.255

  ask by Heartinpiece translate from so

未解决问题?本站智能推荐: