2009-06-17 19 views
13

La situación es la siguiente, tengo dos interfaces de red en mi macbook pro. Una es una interfaz Ethernet estáticamente definida y la otra es una interfaz inalámbrica configurada DHCP.¿Es posible especificar qué interfaz de red para una JVM (o IDE) utilizar

Estoy tratando de encontrar la manera de configurar un proyecto Java específica para usar mi interfaz conectada estáticamente y no simplemente escoger el primero en la lista, ya sea a través de la JVM o por medio de mi idea (IntelliJ 8)

Logré lograr esto a través de una instancia de vmware donde tengo mi entorno virtual alimentándose solo de mi interfaz cableada, pero esto presenta problemas de rendimiento y solo dolores de cabeza generales de voltear entre windows/osx.

Hasta ahora no he podido encontrar una propiedad jvm que me permita especificar qué nic se usa ni he visto documentación para IntelliJ que defina eso. Si alguien tiene alguna idea sobre cómo resolver esto tan fácilmente como sea posible, agradecería la ayuda.

Respuesta

2

Sí, se puede especificar por el siguiente manera:

int port= 52000; // algún puerto libre

MulticastSocket msocket = new MulticastSocket(port);

msocket.setInterface(InetAddress.getByName("172.16.30.205"));

Dónde 172.16.30.205 es una de la dirección IP de mi pc y Me gustaría comunicarme a través de la interfaz.

4

La NIC utilizada para las comunicaciones es seleccionada por el sistema operativo según la mejor "ruta" disponible para la dirección a la que se accede. No hay forma de que una aplicación ubicada sobre los controladores NIC seleccione una NIC específica. Solo puede acercarse cuando escucha en un puerto vinculado a una dirección específica, que solo es aplicable si está ejecutando un servidor.

Puede intentar modificar la 'métrica' de la ruta específica de una NIC para forzar al sistema operativo a preferirla.

+0

Eso es lo que temía, gracias por la respuesta intentaré aplicar mi solución de cinta de vmware de pato por el momento. También estaba pensando en usar un proxy inteligente que simplemente movería el tráfico entre los nics dependiendo de quién lo llamara. –

+2

Esta respuesta no es correcta. Si vincula su socket local a una dirección IP local específica, usará la NIC correspondiente. – EJP

12

java.net.Socket tiene un constructor que especifica a qué dirección IP local vincularse, y dado que cada interfaz de red tiene su propia dirección IP, puede usar eso.

Pero pasar de un java.net.Socket a un protocolo de nivel superior (por ejemplo, HTTP) es otro asunto completamente diferente, pero no especifica qué sería.

No conozco una forma de nivel JVM de hacer esto, por desgracia, solo el enfoque programático anterior.

2

Esto puede ser de ayuda: Identify Network Interface Example

"[S] i usted tiene una preferencia o de lo contrario hay que especificar qué tarjeta de red a utilizar, se puede consultar el sistema de las interfaces adecuadas y encontrar una dirección en la interfaz que quieres usar ".

Cuestiones relacionadas