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

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

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

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


person Jay R.    schedule 14.11.2008    source источник


Ответы (2)


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

person user30682    schedule 14.11.2008
comment
Вам не кажется, что наличие сигблока в вашем ответе - это слишком? Ваше имя ведь тут же в правом нижнем углу вашего ответа, кликабельно и все... - person unwind; 14.11.2008

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

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

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

person Urizev    schedule 01.12.2010