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.
XML-RPC Server hört nur im lokalen Netzwerk
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
So etwas solltest du auf ebene deines Netzwerkes regeln (Firewall, Routing etc).
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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.Rebecca hat geschrieben:So etwas solltest du auf ebene deines Netzwerkes regeln (Firewall, Routing etc).
Die Frage ist: kann der SocketServer sowas oder müsste ich das selbst erweitern? In der Python Dokumentation hab ich dazu noch nichts gefunden.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Ja, der Server startet, aber der Client kann nicht darauf zugreifenms4py hat geschrieben:Hast du es schon mit "192.168.1.0" versucht?
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))
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
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.
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.
Wie soll das funktionieren?Hast du es schon mit "192.168.1.0" versucht?
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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 entsprechenRebecca hat geschrieben:Wie soll das funktionieren?Hast du es schon mit "192.168.1.0" versucht?
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
@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.
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.
Gut, vielleicht nicht üblich, aber häufig anzutreffen. Wenn etwas vergleichbares nicht implementiert ist muss ich einen anderen Weg suchen.lunar hat geschrieben:@burli: Das ist eine, nunja, "unübliche" Interpretation einer IP-Adresse.
Danke für die Antworten
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
@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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also ich kenne sie auch nicht. Kommt mir aber auch irgendwie sehr suspekt vor.burli hat geschrieben:naja, wie man am Kommentar von ms4py sieht ist es nicht unbedingt unbekannt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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?
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?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@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.
0.0.0.0 ist einfach nur die Netzadresse des gesamten Netzes.
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
Code: Alles auswählen
/srv/Musik 192.168.1.0/255.255.255.0(rw)
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
@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).
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).
Mir klar. Aber gilt nicht auch 0.0.0.0 als Standartgateway zum routen?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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Genau! Dass das natürlich nur bei C-Class funktioniert und deshalb allegmein natürlich nicht sein kann, habe ich nicht bedachtjbs hat geschrieben:0 für Netz und 255 für Broadcast (bei Class-C Netzen)
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/