2012-03-27 54 views
31

Necesito desactivar IPv6. Para eso, la documentación de Java indica que se establece la propiedad jvm java.net.preferIPv4Stack=true.Cómo establecer java.net.preferIPv4Stack = true en tiempo de ejecución?

Pero no entiendo cómo hacerlo desde el código en sí.

Muchos foros demostraron hacerlo desde el símbolo del sistema, pero tengo que hacerlo en tiempo de ejecución.

+5

Desactivar IPv6 para solucionar algunos de los errores que tiene en su código es solo un problema para el futuro. Solucione el problema real ahora y ahórrese un dolor de cabeza más adelante. – Flexo

+1

Me gustaría saber * por qué * sientes que necesitas inhabilitar IPv6. Puede haber una razón legítima, pero aún no he visto ninguna ... –

+4

@BrianKnoblauch Aquí está: [authbind] (http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html) funciona solo con IP4. – maaartinus

Respuesta

46

Puede utilizar System.setProperty("java.net.preferIPv4Stack" , "true");

Esto es equivalente a pasar en la línea de comandos a través de -Djava.net.preferIPv4Stack=true

+0

La dirección de difusión adquirida sigue siendo 255.255.255.255 –

+3

Parece bastante normal para IPv4. Es la dirección de difusión de red estándar 0.0.0.0. –

+3

¿Estás seguro de que esto funcionará ?. Al mirar la [fuente] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/net/InetAddress.java#InetAddress.0preferIPv6Address) parece Para mí, 'java.net.preferIPv4Stack' solo se lee cuando se inicia la JVM y luego nunca más. Sin embargo, podría estar equivocado. – peterh

9

Otro enfoque, si estás desesperado y no tienen acceso a (a) el código o (b) la línea de comando, entonces puede usar variables de entorno:

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html.

Específicamente para Java Web Start establece la variable de entorno:

JAVAWS_VM_ARGS

y para applets:

_JPI_VM_OPTIONS

por ejemplo

_JPI_VM_OPTIONS = -Djava.net.preferIPv4Stack = true

Además, bajo las opciones globales de Windows (para aplicaciones generales de Java) se pueden ajustar en la página del plan de control de Java en la pestaña "Java".

7

Me encontré con este problema al intentar enviar correo con javax.mail desde una aplicación web en un servidor web con Java 7. Los destinos del servidor de correo interno fallaron con "red inalcanzable", a pesar de telnet y ping trabajando desde el mismo host , y mientras los servidores de correo externos funcionaban. Intenté

System.setProperty("java.net.preferIPv4Stack" , "true"); 

en el código, pero eso falló. Entonces, el sistema probablemente guardó en caché el valor del parámetro. Configuración del argumento VM

-Djava.net.preferIPv4Stack=true 

en el script de inicio del servidor web funcionó.

Un poco más de evidencia: en un programa de prueba dirigido muy pequeño, la configuración de la propiedad del sistema en el código hizo el trabajo. Entonces, el parámetro probablemente se almacena en caché cuando se usa el primer Socket, probablemente no solo cuando se inicia JVM.

2

así,

que utilizan System.setProperty("java.net.preferIPv4Stack" , "true"); y funciona desde Java, pero no funciona en JBoss AS7.

Aquí es mi trabajo en torno a la solución,

Añadir la siguiente línea al final del archivo $ {} JBOSS_HOME /bin/standalone.conf.bat (justo después :JAVA_OPTS_SET)

set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true" 

Nota: reiniciar el servidor JBoss

0

System.setProperty no está funcionando para los applets. Porque JVM ya se está ejecutando antes del inicio del applet. En este caso utilizamos los parámetros del applet de esta manera:

deployJava.runApplet({ 
     id: 'MyApplet', 
     code: 'com.mkysoft.myapplet.SomeClass', 
     archive: 'com.mkysoft.myapplet.jar' 
    }, { 
     java_version: "1.6*", // Target version 
     cache_option: "no", 
     cache_archive: "", 
     codebase_lookup: true, 
     java_arguments: "-Djava.net.preferIPv4Stack=true" 
    }, 
     "1.6" // Minimum version 
    ); 

puede encontrar en deployJava.js https://www.java.com/js/deployJava.js

0

puede establecer la variable de entorno JAVA_TOOL_OPTS como las siguientes, que será elegido por la JVM para cualquier aplicación.

conjunto JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack = true

Puede configurar esto desde el símbolo del sistema o conjunto de variables de entorno del sistema, en función de su necesidad. Tenga en cuenta que esto se reflejará en todas las aplicaciones Java que se ejecutan en su máquina, incluso si es un intérprete de Java que tiene en una configuración privada.

Cuestiones relacionadas