Используя Java 6, в Linux, как я могу убедиться, что я использую сокет ipv4? - PullRequest
10 голосов
/ 14 ноября 2008

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

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

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

Ответы [ 2 ]

17 голосов
/ 14 ноября 2008

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

3 голосов
/ 01 декабря 2010

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

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

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

...