Domanda

Ho un server con due diverse interfacce di rete, ognuna con un indirizzo IP diverso. Come posso creare un socket in modo che esca un indirizzo IP specifico?

Preferirei un esempio di pitone, ma la domanda è il linguaggio agnostico, quindi sparisci.

EDIT: per favore non darmi " Non puoi " come risposta. Voglio dire, è un computer. Posso fare tutto ciò che mi piace, per esempio: posso disabilitare programmaticamente l'unica interfaccia che non voglio al volo. Sto cercando qualcosa di più bello.

È stato utile?

Soluzione

Puoi sicuramente associare un socket a un dispositivo specifico.

Non so come farlo in Python, ma usando il berkeley socket api (in C) devi chiamare setsockopt () , usando l'opzione SO_BINDTODEVICE .

Si passa a un descrittore di interfaccia, che è di tipo struct ifreq . Idealmente, otterresti il ??contenuto del descrittore dell'interfaccia usando ioctl () e richiedendo SIOCGIFINDEX - passando il nome dell'interfaccia (es. Eth0) come argomento.


modifica: ho appena fatto una rapida ricerca e ho trovato questa documentazione dei metodi socket in pitone. setsockopt () è tra questi.

Altri suggerimenti

Solo una piccola nota: ciò di cui avevo veramente bisogno è legarmi a un IP specifico, e solo per completezza, la soluzione è legare il socket dopo la creazione. Fonte in 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))

from Quora

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top