首页 文章

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

提问于
浏览
1

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

    可能您将无法使用此库来执行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是代表整个本地网络的ip . 您无法将网卡绑定到它,您只能将数据包发送到它的广播IP 255.255.255.255

相关问题