DHCP-клиент на Java, невозможно отправить с IP 0.0.0.0 - PullRequest
1 голос
/ 25 июля 2011

Я пытаюсь создать DHCP-клиент с использованием Java.Клиент отправит Discover, получит предложение, отправит запрос и получит подтверждение.Однако при отправке диска и запроса UDP DatagramPackets мне нужно отправить их с порта IP 0.0.0.0 68, поскольку целью DHCP является получение полезного IP-адреса с сервера DHCP.Однако если я свяжу свой сокет с 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

Исключение.

Есть ли способ отправки пакетов UDP с 0.0.0.0 и через System.exec() (при необходимости) IP-адрес, полученный от DHCPсервер, использующий Java?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Возможно, вы не сможете использовать эту библиотеку для работы с DHCP.Библиотека предполагает, что вы не захотите использовать 0.0.0.0 в качестве адреса отправителя, даже если DHCP указывает, что вам не следует указывать там IP-адрес.Просто сканирование RFC, кажется, указывает на то, что вы «не должны заполнять поле отправителя».Возможно ли, что это будет просто проигнорировано?Может случиться так, что, поскольку все DHCP транслируются, это не имеет значения, и вы можете просто заполнить что угодно.Вы пытались прослушивать запросы DHCP на Wireshark или другом анализаторе пакетов, чтобы определить, действительно ли он 0.0.0.0?

Возможно, вам придется строить дейтаграммы на более низком уровне.

Я недумаю, что будет иметь значение, как будет установлен ваш собственный IP-адрес, если вы используете DatagramSocket, потому что библиотека изменит его, если вы попытаетесь назначить 0.0.0.0.

Редактировать: я сканировал части dhclientsource, и он огромен, и я не понимаю его, но похоже, что они используют сценарии оболочки для настройки интерфейсов с использованием ifconfig.Так что это может ответить на эту часть вопроса.Так что вы можете просто использовать свой ifconfig, чтобы изменить свой IP-адрес, как вы сейчас.

0 голосов
/ 25 июля 2011

0.0.0.0 - это ip, представляющий всю локальную сеть. Вы не можете привязать к нему свою сетевую карту, вы можете только отправлять пакеты на ее широковещательный IP-адрес 255.255.255.255

...