¿Existe una manera confiable en Windows, además de cambiar la tabla de enrutamiento, de forzar a un socket recién creado a usar una interfaz de red específica? Entiendo que bind()
a la dirección IP de la interfaz no lo garantiza.Uso de una interfaz de red específica para un socket en Windows
Respuesta
(segunda vez Ok suerte ..)
FYI hay otra pregunta aquí perform connect() on specific network adapter lo largo de las mismas líneas ...
Según The Cable Guy
Windows XP y Windows Server® 2003 utilice el modelo de host débil para los envíos y recibe para todas las interfaces IPv4 y el modelo de host fuerte para los envíos y recibe para todos los IPv6 interfaces. Usted no puede configurar este comportamiento. La pila TCP/IP Siguiente Generación en Windows Vista y Windows Server 2008 apoya fuerte host envía y recibe para IPv4 e IPv6 por defecto en todas las interfaces excepto el Teredo interfaz túnel para un relé Teredo específico de huésped.
Para responder a su pregunta (correctamente, esta vez) en Windows XP y Windows Server 2003 IP4 no, pero para IP6 sí. Y para Windows Vista y Windows 2008 sí (excepto en ciertas circunstancias).
También desde http://www.codeguru.com/forum/showthread.php?t=487139
En Windows, una llamada a bind() afecta selección de la tarjeta sólo el tráfico entrante, el tráfico no saliente. Por lo tanto, en un cliente se ejecuta en un sistema de multitarjeta (es decir, más de una tarjeta de interfaz), es la pila de red que selecciona la tarjeta para usar, y hace su selección basado únicamente en el IP de destino , que a su vez se basa en en la tabla de enrutamiento. Una llamada a bind() no afectará la elección de la tarjeta de ninguna manera.
que tiene algo que ver con algo que se llama un "Sistema de Weak End" modelo ("Débil E/S"). Vista cambió a un modelo E/S fuerte , por lo que el problema podría no surgir en Vista. Pero todas las versiones anteriores de Windows usaban el modelo E/S débil.
Con un débil modelo de E/S, que es la tabla de enrutamiento que decide qué tarjeta se utiliza para el tráfico saliente en un sistema multitarjeta .
A ver si estos hilos ofrecen algunas idea: "la unión toma local de multitarjeta anfitrión en Windows XP no funciona"
en http://www.codeguru.com/forum/showthread.php?t=452337
"Cómo conectar un puerto a un determinado Networkcard ? " en http://www.codeguru.com/forum/showthread.php?t=451117. Este hilo menciona la función CreateIpForwardEntry(), que (creo) se puede utilizar para crear una entrada en la tabla de enrutamiento de modo que todo el tráfico IP saliente con un servidor especificado se enruta a través de un adaptador especificado.
"Trabajar con tarjetas Ethernet 2" en http://www.codeguru.com/forum/showthread.php?t=448863
"extraño comportamiento de vinculación de multitarjeta sistema" en http://www.codeguru.com/forum/showthread.php?t=452368
Espero que ayude!
- 1. ¿Cómo hago un socket de salida a una interfaz de red ESPECÍFICA?
- 2. Linux: ¿Cómo forzar el uso de una interfaz de red específica?
- 3. cómo vincular el socket sin procesar a una interfaz específica
- 4. Boost asio socket multicast a una interfaz de ethernet específica
- 5. ¿Cómo se crea una interfaz de red virtual en Windows?
- 6. boost :: asio - Aclaración sobre la vinculación a una interfaz de red específica
- 7. Simulación de interfaz de red en Python?
- 8. Deshabilitar el administrador de red para una interfaz en particular
- 9. Uso efectivo de gvim en una red
- 10. ¿Cómo configurar un socket para multidifusión UDP con 2 tarjetas de red presentes?
- 11. ¿Cómo puedo detectar una conexión de interfaz de red deshabilitada desde una aplicación de Windows?
- 12. Enlazar servicio web WCF a una interfaz de red específica/IP
- 13. JavaScript: Uso de una cola para comunicación de red
- 14. Tutorial de programación Java Socket/red
- 15. Elegir interfaz de red de multidifusión en Python
- 16. Hacer interfaz de red virtual en Linux?
- 17. comando bash para leer desde el socket de red?
- 18. Escribir una extensión de kernel OS X para implementar la opción de socket SO_BINDTODEVICE de Linux
- 19. Inicio de procesos remotos en una red de Windows
- 20. ¿Cómo elegir qué interfaz de red usar?
- 21. Uso de red cautiva
- 22. Crear una interfaz de usuario para supervisar e interactuar con un servicio de Windows en ejecución
- 23. ¿Es posible especificar qué interfaz de red para una JVM (o IDE) utilizar
- 24. instalar una versión específica de Ruby on Rails en Windows
- 25. cygwin + programación de socket de Windows
- 26. Identificación de la interfaz de red activa
- 27. Cómo encontrar si un método está implementando una interfaz específica
- 28. Uso de cmake en Windows para C++
- 29. red XNA en Windows
- 30. Excepción de socket en la aplicación de estilo Metro cuando el uso compartido está activado en una red
Gracias, A menos que me falta algo, ninguna respuesta es relevante, ya que SO_BINDTODEVICE no es relevante para Windows. Sospecho que su resumen es correcto aunque, aunque no tengo la evidencia. – Ofir
¡Ups, lo tienes! Actualicé mi respuesta anterior con mejor información, ¡lo siento! – Ezz
Tenga en cuenta que los modelos de host débiles y fuertes no afectan cómo se enruta el tráfico enviado desde un socket. Es decir. El modelo de host fuerte garantiza que el tráfico que sale de un adaptador de red utilice la dirección IP asignada de ese adaptador, pero no afecta cómo la pila de red en el host selecciona el adaptador de salida para usar realmente. Esto en realidad se explica en el enlace "The Cable Guy" arriba, así como en Wikipedia: https://en.wikipedia.org/wiki/Host_model –