2008-11-14 9 views
10

Estoy tratando de escribir una pequeña aplicación java rápida para leer el contenido de un archivo pcap (de Wireshark) y reproducir los datos en la red en un cuadro de Linux. El archivo solo contendrá paquetes de difusión UDP, por lo que mi aplicación solo necesita la marca de tiempo, el número de puerto y los datos del paquete para hacer lo que necesito. Mi problema es que la aplicación que intento probar con este código está escuchando transmisiones de IPv4 UDP en Windows. Mi aplicación de prueba sigue abriendo un socket IPv6 para enviar los datos.Usando Java 6, en Linux, ¿cómo puedo asegurarme de usar un socket ipv4?

Estoy usando netstat -a -u -p para determinar que el socket es un socket udp6. En Windows, sé que no es así.

¿Cuál es la forma más fácil o mejor para forzar la aplicación de prueba en Linux en java para abrir una toma udp o udp4 en su lugar? No quiero forzarme a proporcionar la dirección de red ipv4 cada vez. Quiero poder mover este código a otra máquina sin tener que recordar que es una configuración que debe cambiarse.

Respuesta

17

Add -Djava.net.preferIPv4Stack = verdadero para las propiedades de tiempo de ejecución de la aplicación Java.

+3

¿No sientes que tener un "sigblock" en tu respuesta es demasiado? Después de todo, su nombre está ahí, en la esquina inferior derecha de su respuesta, puede hacer clic y todo ... – unwind

+0

¿Cómo se puede hacer esto en Android? – user239558

3

También puede utilizar este comando (como root) y usted no tendrá que añadir el parámetro = true -Djava.net.preferIPv4Stack en cada aplicación java:

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

Si desea mantener esta configuración siempre puedes escribirlo en algunos guiones iniciales.

Cuestiones relacionadas