Seite 1 von 1
XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 09:22
von burli
Hi, wie kann ich denn dem SimpleXMLRPCServer sagen, dass er nur auf Anfragen aus dem lokalen Netzwerk hören soll? Mit "localhost" hört er logischerweise nur auf eigene Anfragen, gebe ich nur "" an hört er auf alles.
Er soll aber nur auf den Bereich 192.168.1.x hören. Ich habe aber noch nicht herausgefunden, wie das geht.
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 09:30
von Rebecca
So etwas solltest du auf ebene deines Netzwerkes regeln (Firewall, Routing etc).
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 11:31
von burli
Rebecca hat geschrieben:So etwas solltest du auf ebene deines Netzwerkes regeln (Firewall, Routing etc).
Das tut das Netzwerk nach außen hin. Es wäre aber zusätzlich nicht schlecht, wenn der Server selbst schon nur auf bestimmte IP Bereiche reagiert.
Die Frage ist: kann der SocketServer sowas oder müsste ich das selbst erweitern? In der Python Dokumentation hab ich dazu noch nichts gefunden.
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 12:06
von ms4py
Hast du es schon mit "192.168.1.0" versucht?
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 12:26
von burli
ms4py hat geschrieben:Hast du es schon mit "192.168.1.0" versucht?
Ja, der Server startet, aber der Client kann nicht darauf zugreifen
Code: Alles auswählen
Traceback (most recent call last):
File "client_example1.py", line 4, in <module>
print "3 is even: %s" % str(proxy.is_even(3))
File "/usr/lib/python2.6/xmlrpclib.py", line 1199, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python2.6/xmlrpclib.py", line 1489, in __request
verbose=self.__verbose
File "/usr/lib/python2.6/xmlrpclib.py", line 1235, in request
self.send_content(h, request_body)
File "/usr/lib/python2.6/xmlrpclib.py", line 1349, in send_content
connection.endheaders()
File "/usr/lib/python2.6/httplib.py", line 904, in endheaders
self._send_output()
File "/usr/lib/python2.6/httplib.py", line 776, in _send_output
self.send(msg)
File "/usr/lib/python2.6/httplib.py", line 735, in send
self.connect()
File "/usr/lib/python2.6/httplib.py", line 716, in connect
self.timeout)
File "/usr/lib/python2.6/socket.py", line 514, in create_connection
raise error, msg
socket.error: [Errno 111] Connection refused
Code: Alles auswählen
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
def is_even(n):
return n%2 == 0
server = SimpleXMLRPCServer(("192.168.1.0", 8765))
print "Listening on port 8000..."
server.register_function(is_even, "is_even")
server.serve_forever()
Code: Alles auswählen
import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://192.168.1.xxx:8765/")
print "3 is even: %s" % str(proxy.is_even(3))
print "100 is even: %s" % str(proxy.is_even(100))
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 12:38
von Rebecca
Auf Socket-Ebene kannst du nichts tun, die Verbindung zu verhindern. Wenn du eine Verbindung hast, kannst du sehen, woher die kommt und koenntest sie wieder unterbrechen (Socket-Objekte haben dafuer die Methode
getpeername). Wie einfach man das jetzt in den XML-RPC-Server einbauen kann, weiss ich nicht.
Alles in allem ist das eher ein ungewoehnliches Vorgehen. Den einzigen sinnvollen Anwendungsfall, den ich mir vorstellen kann, ist z.B. Admin-Zugang nur von bestimmten IPs zuzulassen (als zusaetzliche Barriere zur Authentifizierung/Authorisierung) wenn ansonsten der Service offen bleiben soll.
Hast du es schon mit "192.168.1.0" versucht?
Wie soll das funktionieren?
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 12:43
von burli
Rebecca hat geschrieben:Hast du es schon mit "192.168.1.0" versucht?
Wie soll das funktionieren?
Bei anderen Serversystemen wie MySQL ist das die übliche Vorgehensweise. ".0" heißt, es soll der gesamte IP Raum von 1-255 berücksichtigt werden. 0.0.0.0 würde dem gesamten IP Raum entsprechen
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 13:48
von lunar
@burli: Das ist eine, nunja, "unübliche" Interpretation einer IP-Adresse. So etwas wie eine "Bereichsadresse" gibt es nicht. "0" steht nicht für einen Bereich, sondern für "0". "10.0.0.5" bezeichnet genau eine einzige Adresse, nämlich 10.0.0.5. Es gibt allenfalls Netzadressen. Eine Adresse, die auf 0 endet, ist zwar mit Sicherheit eine Netzadresse, aber man braucht die Netzmaske, um das zugehörige Netz herauszufinden.
Ich bezweifele daher, dass mysql (oder irgendein beliebiger Dienst) mit "--bind-address=192.168.1.0" etwas anfangen kann. MySQL akzeptiert als Argument für diesen Parameter eine einfache IP-Adresse, an die der Dienst anschließend bindet.
Auf der Ebene eines Sockets kann 192.168.1.0 jedenfalls gar nicht funktionieren. Wie Rebecca schon sagte, kannst Du allenfalls nachträglich Verbindungen verwerfen. Dazu musst Du eben den Quelltext der Serverklasse lesen, um herauszufinden, an welcher Stelle eingehende Verbindungen behandelt werden, und Dir einen Weg ausdenken, um das lokale Subnetz zu definieren. Samba beispielsweise fragt den Kernel nach der Netzwerkmaske der Schnittstelle, auf welcher der Dienst lauscht.
Besser als der Paketfilter Deines Systems bekommst Du das allerdings eh nicht hin, also wozu die Mühe? Konfiguriere den Paketfilter entsprechend, das ist einfacher.
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 14:06
von burli
lunar hat geschrieben:@burli: Das ist eine, nunja, "unübliche" Interpretation einer IP-Adresse.
Gut, vielleicht nicht üblich, aber häufig anzutreffen. Wenn etwas vergleichbares nicht implementiert ist muss ich einen anderen Weg suchen.
Danke für die Antworten
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 14:18
von lunar
@burli: "Unüblich" war ein Euphemismus für "falsch". Eine "0" alleine steht nicht für einen Bereich. Deswegen ist diese Interpretation auch nicht häufig anzutreffen, ich habe sie noch nie gesehen.
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 14:23
von burli
naja, wie man am Kommentar von ms4py sieht ist es nicht unbedingt unbekannt. Aber egal
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 22:16
von Leonidas
burli hat geschrieben:naja, wie man am Kommentar von ms4py sieht ist es nicht unbedingt unbekannt.
Also ich kenne sie auch nicht. Kommt mir aber auch irgendwie sehr suspekt vor.
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Montag 16. August 2010, 23:13
von jbs
0 für Netz und 255 für Broadcast (bei Class-C Netzen)
Das ist das was man mir in der Schule beigebracht hat.
Wobei man ja auch auf 0.0.0.0 lauschen kann. Hat die Adresse nicht auch verschiedene Funktionen?
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Dienstag 17. August 2010, 08:07
von lunar
@jbs: Genauer gesagt: In der Netzadresse sind alle Bits des Host-Teils 0. Man braucht aber die Netzmaske, um zwischen Host und Netzteil unterscheiden zu können. Bei 10.0.0.0 kann für alle Netze von 10.0.0.0/8 bis 10.0.0.0/31 stehen. Ebenso gibt es Netzadresse ohne 0 (e.g. 192.168.2.240/28).
0.0.0.0 ist einfach nur die Netzadresse des gesamten Netzes.
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Dienstag 17. August 2010, 09:34
von burli
Weil ich es gerade sehe: in der /etc/exports steht für die Freigabe von NFS Laufwerken z.B.
Aber da steht auch die Subnet Maske dabei. Darum ging es vermutlich. Die IP Adresse mit .0 ergibt nur in Verbindung mit der Subnet Mask einen Sinn
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Dienstag 17. August 2010, 10:22
von lunar
@burli: Genau darum ging es.
Eine solche Filterung geschieht zudem immer auf Applikationsebene, man kann keinen Socket erzeugen, der nur Pakete eines bestimmten Subnetzes akzeptiert. Man muss für jeden Client einzeln prüfen, ob dessen IP-Adresse im erlaubten Bereich liegt (der in Deinem NFS-Beispiel von 192.168.2.1 bis 192.168.2.254 geht).
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Dienstag 17. August 2010, 11:47
von jbs
lunar hat geschrieben:@jbs: Genauer gesagt: In der Netzadresse sind alle Bits des Host-Teils 0. Man braucht aber die Netzmaske, um zwischen Host und Netzteil unterscheiden zu können. Bei 10.0.0.0 kann für alle Netze von 10.0.0.0/8 bis 10.0.0.0/31 stehen. Ebenso gibt es Netzadresse ohne 0 (e.g. 192.168.2.240/28).
0.0.0.0 ist einfach nur die Netzadresse des gesamten Netzes.
Mir klar. Aber gilt nicht auch 0.0.0.0 als Standartgateway zum routen?
Re: XML-RPC Server hört nur im lokalen Netzwerk
Verfasst: Dienstag 17. August 2010, 12:24
von ms4py
jbs hat geschrieben:0 für Netz und 255 für Broadcast (bei Class-C Netzen)
Genau! Dass das natürlich nur bei C-Class funktioniert und deshalb allegmein natürlich nicht sein kann, habe ich nicht bedacht
