2008-12-02 10 views
19

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?¿Cómo hago un socket de salida a una interfaz de red ESPECÍFICA?

Preferiría un ejemplo de pitón, pero la pregunta es independiente del idioma, así que dispara.

EDITAR: Por favor no me dé "No se puede" como respuesta. Quiero decir, es una computadora. Puedo hacer cualquier cosa que me guste, por ejemplo, puedo desactivar programáticamente la única interfaz que no quiero sobre la marcha. Estoy buscando algo más bonito.

Respuesta

12

Sin duda puede unir un zócalo a un dispositivo específico.

No sé cómo hacerlo en python, pero usando la aplicación apk de berkeley (en C) necesita llamar al setsockopt(), usando la opción SO_BINDTODEVICE.

Usted ingresa un descriptor de interfaz, que es del tipo struct ifreq. Idealmente, obtendría el contenido del descriptor de interfaz utilizando ioctl(), y solicitando SIOCGIFINDEX - pasando el nombre de la interfaz (por ejemplo, eth0) como argumento.


edit: Acabo de hacer una búsqueda rápida y se encontró this documentación de los métodos de socket en Python. setsockopt() es uno de ellos.

+0

Muchas gracias! Lo intentaré e informaré. – Mikle

+0

Funciona solo para Linux. ¿Qué hay de OS X? – Dor

11

Solo una pequeña nota: lo que realmente necesito es enlazar a una dirección IP específica, y solo para completar, la solución es unir 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)) 
1
import socket 
s = socket.socket() 
s.bind((get_ip_address('eth0'), 0)) 

de Quora

+1

Esto no funcionará sin la definición de get_ip_address – toth

Cuestiones relacionadas