繁体   English   中英

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

[英]DHCP Client on Java, Can't send from IP 0.0.0.0

我正在尝试使用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地址?

可能是您将无法使用此库来进行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地址。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM