Tengo un servidor con dos conexiones de Ethernet separadas. Cuando enlace un socket en python, se establece de manera predeterminada en una de las dos redes. ¿Cómo puedo extraer una transmisión de multidifusión desde la segunda red en Python? Intenté llamar a bind usando la dirección IP del servidor en la segunda red, pero eso no funcionó.Elegir interfaz de red de multidifusión en Python
Respuesta
Me di cuenta. Resultó que la pieza que me faltaba era agregar la interfaz a la estructura mreq que se usa para agregar membresía a un grupo de multidifusión.
Cuando bind
ing su zócalo, tratan los valores mencionados here:
Para obtener las direcciones IPv4, dos formas especiales se aceptan en lugar de una dirección de host : la cadena vacía representa INADDR_ANY, y la cadena '' representa INADDR_BROADCAST.
INADDR_ANY
también se conoce como la dirección de comodín:
sockets con direcciones locales comodín puede recibir mensajes dirigidos al número de puerto especificado y dirigida a cualquiera de las posibles direcciones asignadas a un host`
Más here.
Te recomiendo que no uses INADDR_ANY. En entornos de producción de multidifusión, debe ser muy específico con sus sockets de multidifusión y no desea hacer cosas como enviar uniones igmp a todas las interfaces. Esto lleva a soluciones temporales de trabajo pirateado cuando las cosas no funcionan como "route add -host 239.1.1.1 dev eth3" para que las combinaciones de multidifusión funcionen correctamente dependiendo del sistema en cuestión. Use este lugar:
def joinMcast(mcast_addr,port,if_ip):
"""
Returns a live multicast socket
mcast_addr is a dotted string format of the multicast group
port is an integer of the UDP port you want to receive
if_ip is a dotted string format of the interface you will use
"""
#create a UDP socket
mcastsock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#allow other sockets to bind this port too
mcastsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#explicitly join the multicast group on the interface specified
mcastsock.setsockopt(socket.SOL_IP,socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(mcast_addr)+socket.inet_aton(if_ip))
#finally bind the socket to start getting data into your socket
mcastsock.bind((mcast_addr,port))
return mcastsock
En el mcastsock.bind también se puede utilizar '' en lugar de la cadena de dirección, pero yo aconsejaría contra esto. Con '', si tiene otro socket que usa el mismo puerto, ambos sockets recibirán datos de los demás.
- 1. ¿Cómo elegir qué interfaz de red usar?
- 2. Simulación de interfaz de red en Python?
- 3. Multidifusión en Python
- 4. Especificar a qué interfaz de red debe conectarse una multidifusión UDP en .NET
- 5. Elegir el tipo correcto de red neuronal
- 6. pitón: urllib2 utilizando diferentes interfaz de red
- 7. Soporte de multidifusión en .Net
- 8. Hacer interfaz de red virtual en Linux?
- 9. Identificación de la interfaz de red activa
- 10. Cómo recibir paquetes de multidifusión en Android
- 11. ¿Cómo configurar un socket para multidifusión UDP con 2 tarjetas de red presentes?
- 12. Cómo determinar la interfaz de red de Internet en Java
- 13. Delegados de multidifusión asincrónica
- 14. ¿Cómo hacer una multidifusión UDP a través de la red local en C#?
- 15. recepción de multidifusión en un servidor con múltiples interfaces (Linux)
- 16. Interfaz de red de búsqueda de Java para la puerta de enlace predeterminada
- 17. Multidifusión confiable en Java
- 18. ¿Cómo elegir el idioma de la interfaz Eclipse?
- 19. ¿Cómo se crea una interfaz de red virtual en Windows?
- 20. Interfaz de red virtual en Mac OS X
- 21. Deshabilitar el administrador de red para una interfaz en particular
- 22. ¿Qué versión de python opencv debo elegir?
- 23. Ninject multidifusión
- 24. Ping de red local en python
- 25. ¿El mejor tutorial para multidifusión de aplicaciones?
- 26. Comprobación del estado de la interfaz de red asíncrona
- 27. Elegir un archivo en Python con simple Dialog
- 28. Establecer la métrica de la interfaz de red
- 29. Rendimiento de multidifusión UDP bajo carga
- 30. Atributos de multidifusión en conjunto. ¿Son malvados?
Sí, has salvado mis sueños nocturnos – waza123