Мне нужна помощь для моего Java-приложения. Мне нужно получать широковещательные пакеты через сокет дейтаграммы, связанный с подстановочным адресом. Самое главное, что мой wlan0 не должен иметь настроенного IP-адреса, потому что цель этого приложения — получить действительный IP-адрес с сервера, своего рода DHCP.
Сначала я настраиваю wlan0 на 0.0.0.0.
Кроме того, я настроил маршрутизацию по умолчанию для прохождения через интерфейс wlan0 (единственный доступный интерфейс).
Вывод Ifconfig:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:117 errors:0 dropped:0 overruns:0 frame:0
TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9337 (9.3 KB) TX bytes:9337 (9.3 KB)
wlan0 Link encap:Ethernet HWaddr 00:1b:77:dd:e7:a4
inet6 addr: fe80::21b:77ff:fedd:e7a4/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:30211 errors:0 dropped:1 overruns:0 frame:0
TX packets:6128 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16654450 (16.6 MB) TX bytes:654646 (654.6 KB)
Вот как я создаю сокет на своем клиенте:
InetSocketAddress broadcast = new InetSocketAddress("0.0.0.0",listenPort);
socket = new DatagramSocket(null);
socket.setSoTimeout(5000);
socket.setBroadcast(true);
socket.bind(new InetSocketAddress(broadcast.getPort()));
Затем я отправляю пакеты дейтаграмм от клиента на 255.255.255.255. Сервер (в той же подсети) их получает и отвечает широковещательной рассылкой в подсети. Клиентская машина получает широковещательный пакет сервера, а сокет - нет, и он блокируется на socket.receive();
Есть ли способ получать дейтаграммы через сокет, привязанный к ненастроенному (без IP) интерфейсу?
Я попытался указать IP для wlan0, и все работает, но мне нужно, чтобы wlan0 не был настроен, а был привязан только к подстановочному адресу 0.0.0.0.