Wie kann ich einen abgehenden Buchse zu einer bestimmten Netzwerk-Schnittstelle machen?
-
22-07-2019 - |
Frage
Ich habe einen Server mit zwei verschiedenen Netzwerkschnittstellen, die jeweils mit einer anderen IP-Adresse. Wie kann ich einen Socket erstellen so dass es dann eine bestimmte IP-Adresse gehen?
Ich würde ein Python-Beispiel bevorzugen, aber die Frage ist sprachunabhängig, so schießen weg.
EDIT: Bitte geben Sie mir nicht „Sie können nicht“ als Antwort. Ich meine, es ist ein Computer. Ich kann ich es tut so etwas wie, zum Beispiel - kann ich programmatisch die eine Schnittstelle deaktivieren Ich will nicht im Fluge. Ich suche nach etwas schöner.
Lösung
Sie können natürlich auch eine Buchse an ein bestimmtes Gerät gebunden werden.
Ich weiß nicht, wie es in Python zu tun, aber die berkeley Buchse api mit (in C) benötigen Sie setsockopt()
aufrufen, die Option SO_BINDTODEVICE
verwendet wird.
Sie übergeben in einem Interface-Descriptor, die vom Typ struct ifreq
ist. Im Idealfall würden Sie den Inhalt des Schnittstellendeskriptor erhalten, indem ioctl()
verwenden und SIOCGIFINDEX
anfordernden -. Den Namen der Schnittstelle vorbei (. ZB eth0) als Argument
edit: habe gerade eine schnelle Suche und dieser Dokumentation der Socket Methoden gefunden in Python. setsockopt()
ist unter ihnen.
Andere Tipps
Nur eine kleine Anmerkung - was ich wirklich brauchen, ist an eine bestimmte IP zu binden, und nur aus Gründen der Vollständigkeit ist die Lösung, um die Buchse nach der Erstellung zu binden. Quelle 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))
von Quoren