Я пытаюсь написать небольшое Java-приложение для чтения содержимого файла pcap (из Wireshark) и воспроизведения данных в сети в Linux-окне. Файл будет содержать только широковещательные пакеты UDP, поэтому моему приложению действительно нужны только временная метка, номер порта и данные из пакета, чтобы делать то, что мне нужно. Моя проблема в том, что приложение, которое я пытаюсь протестировать с помощью этого кода, прослушивает широковещательные передачи IPv4 UDP в Windows. Мое тестовое приложение продолжает открывать сокет IPv6 для отправки данных.
Я использую netstat -a -u -p, чтобы определить, что это сокет udp6. На окнах я знаю, что это не так.
Каков самый простой или лучший способ заставить тестовое приложение на Linux в java вместо этого открывать сокет udp или udp4? Я не хочу, чтобы меня заставляли каждый раз указывать сетевой адрес ipv4. Я хочу иметь возможность перенести этот код на другую машину, не запоминая, что это некоторая конфигурация, которую нужно изменить.




Добавьте -Djava.net.preferIPv4Stack = true в свойства среды выполнения вашего Java-приложения.
Также вы можете использовать эту команду (как root), и вам не нужно будет добавлять параметр -Djava.net.preferIPv4Stack = true в каждое приложение Java:
# echo 0 > /proc/sys/net/ipv6/bindv6only
Если вы хотите сохранить эту конфигурацию навсегда, вы можете записать ее в каком-нибудь начальном скрипте.
Вам не кажется, что наличие «сигблока» в вашем ответе - это немного? В конце концов, ваше имя прямо в правом нижнем углу вашего ответа, оно доступно для кликов и все такое ...