Pergunta

Eu tenho um servidor com duas interfaces de rede diferentes, cada um com um endereço IP diferente. Como posso criar um socket por isso vai sair um endereço IP específico?

Eu prefiro um exemplo python, mas a questão é agnóstico língua, de modo atirar fora.

EDIT: Por favor, não me dê "Você não pode" como resposta. Quero dizer, é um computador. Eu posso fazer qualquer coisa que eu como a ele, por exemplo - eu posso programaticamente desativar a uma interface Eu não quero na mosca. Eu estou procurando algo mais bonita.

Foi útil?

Solução

Você certamente pode ligar um socket a um dispositivo específico.

Eu não sei como fazê-lo em python, mas usando a API de soquete Berkeley (em C) você precisa chamar setsockopt(), usando o SO_BINDTODEVICE opção.

Você passa um descritor de interface, que é do tipo struct ifreq. Idealmente, você iria receber o conteúdo do descritor de interface utilizando ioctl(), e solicitando SIOCGIFINDEX -. Passando o nome da interface (. Por exemplo, eth0) como um argumento


Edit: Só fiz uma busca rápida e encontrou esta documentação dos métodos de soquete em Pitão. setsockopt() está entre eles.

Outras dicas

Apenas uma pequena nota - o que eu realmente preciso é se ligam a um IP específico, e apenas por uma questão de exaustividade, a solução é ligar o soquete após a criação. Fonte em 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top