Подтвердить что ты не робот

Используя Java 6, на Linux, как я могу убедиться, что вы используете ipv4-сокет?

Я пытаюсь написать небольшое небольшое java-приложение для чтения содержимого файла pcap (из Wireshark) и воспроизведения данных в сети в окне linux. Файл будет содержать только широковещательные пакеты UDP, поэтому моему приложению действительно нужна метка времени, номер порта и данные из пакета, чтобы делать то, что мне нужно. Моя проблема в том, что приложение, которое я пытаюсь протестировать с помощью этого кода, прослушивает широковещательные передачи UDP IPv4 в Windows. Мое тестовое приложение продолжает открывать сокет IPv6 для отправки данных.

Я использую netstat -a -u -p, чтобы определить, что сокет - это сокет udp6. На окнах я знаю, что это не так.

Каков самый простой или лучший способ заставить тестовое приложение на linux в java открыть вместо этого udp или udp4? Я не хочу, чтобы каждый раз приходилось вводить сетевой адрес ipv4. Я хочу, чтобы иметь возможность переместить этот код на другой компьютер, не задумываясь о том, что их некоторая конфигурация должна быть изменена.

4b9b3361

Ответ 1

Добавить -Djava.net.preferIPv4Stack = true для свойств вашей среды выполнения Java.

Ответ 2

Также вы можете использовать эту команду (с правами администратора), и вам не нужно будет добавлять параметр -Djava.net.preferIPv4Stack = true в каждое приложение Java:

 # echo 0 > /proc/sys/net/ipv6/bindv6only

Если вы хотите сохранить эту конфигурацию навсегда, вы можете записать ее в каком-то начальном script.