Pregunta

Tengo un servidor con dos interfaces de red diferentes, cada una con una dirección IP diferente. ¿Cómo puedo crear un socket para que salga una dirección IP específica?

Prefiero un ejemplo de Python, pero la pregunta es independiente del lenguaje, así que dispare.

EDITAR: Por favor no me des " No puedes " como respuesta Quiero decir, es una computadora. Puedo hacer lo que quiera, por ejemplo: puedo desactivar mediante programación la única interfaz que no quiero sobre la marcha. Estoy buscando algo más bonito.

¿Fue útil?

Solución

Ciertamente puede vincular un socket a un dispositivo específico.

No sé cómo hacerlo en Python, pero usando la API de socket de Berkeley (en C) necesita llamar a setsockopt () , usando la opción SO_BINDTODEVICE .

Usted pasa un descriptor de interfaz, que es del tipo struct ifreq . Lo ideal sería obtener el contenido del descriptor de la interfaz utilizando ioctl () y solicitando SIOCGIFINDEX , pasando el nombre de la interfaz (por ejemplo, eth0) como argumento.


editar: solo hice una búsqueda rápida y encontré esta documentación de los métodos de socket en pitón. setsockopt () está entre ellos.

Otros consejos

Solo una pequeña nota: lo que realmente necesitaba es vincularme a una IP específica, y solo por razones de integridad, la solución es vincular el socket después de la creación. Fuente en python:

import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))
s.connect(("321.12.131.432", 80))
import socket
s = socket.socket()
s.bind((get_ip_address('eth0'), 0))

de Quora

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top