Est-il possible de spécifier quelle interface réseau pour une machine virtuelle (ou IDE) utiliser

StackOverflow https://stackoverflow.com/questions/1008781

Question

La situation est la suivante: j'ai deux interfaces réseau dans mon macbook pro. L’une est une interface Ethernet définie statiquement et l’autre est une interface sans fil configurée par DHCP.

J'essaie de comprendre comment configurer un projet Java spécifique pour qu'il utilise uniquement mon interface câblée de manière statique, et pas simplement pour sélectionner le premier de la liste, via la JVM ou via mon IDEA (IntelliJ 8)

J'ai réussi à atteindre cet objectif via une instance de vmware où mon environnement virtuel se nourrit uniquement de mon interface filaire, mais présente des problèmes de performances des annonces et des maux de tête généraux liés au basculement entre Windows / OSx.

Je n’ai jusqu’à présent trouvé aucune propriété jvm permettant de spécifier le nic utilisé, ni la documentation relative à IntelliJ qui le définit. Si quelqu'un a des idées sur la façon de résoudre ce problème le plus simplement possible, j'apprécierais son aide.

Était-ce utile?

La solution

Oui, vous pouvez spécifier de la manière suivante:

int port = 52000; // un port libre

MulticastSocket msocket = new MulticastSocket (port);

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

Où 172.16.30.205 est l’une des adresses IP de mon ordinateur et je souhaite communiquer via une interface.

Autres conseils

java.net.Socket a un constructeur qui spécifie l'adresse IP locale à associer. Chaque interface réseau obtenant sa propre adresse IP, vous pouvez l'utiliser.

Mais passer d'un java.net.Socket à un protocole de niveau supérieur (par exemple, HTTP) est un tout autre problème, mais vous ne précisez pas ce que ce serait.

Je ne connais pas de moyen de le faire au niveau de la JVM, malheureusement, mais seulement l'approche programmatique ci-dessus.

La carte réseau utilisée pour les communications est sélectionnée par le système d'exploitation en fonction du meilleur "itinéraire" disponible, quelle que soit l'adresse utilisée. Aucune application située au-dessus des pilotes de carte réseau ne peut sélectionner une carte réseau spécifique. Vous ne pouvez vous rapprocher que lorsque vous écoutez sur un port lié à une adresse spécifique, ce qui ne s'applique que si vous utilisez un serveur.

Vous pouvez essayer de modifier la "métrique" de la route spécifique à une carte réseau pour forcer le système d'exploitation à la préférer.

Cela peut être utile: Exemple d'identification d'interface réseau

"Si vous avez une préférence ou si vous devez indiquer quelle carte réseau utiliser, vous pouvez interroger le système pour connaître les interfaces appropriées et rechercher une adresse sur l'interface à utiliser."

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top