SocketServer an Port oberhalb von 1024 binden (Ubuntu 7.04)
Verfasst: Samstag 26. Januar 2008, 22:40
Hi,
ich bastel gerade an einem kleinen XMLRPC-Script und benutze dafür den SimpleXMLRPCServer. Soweit, so gut, lokal funktioniert alles. Als ich dann gerade von einem anderen Rechner 'nen RPC abschickte konnte ich nicht zu dem Server connecten.
Langer Rede kurzer Sinn, nach einigem Testen auch mit den einfachsten Sockets "wo gibt" habe ich jetzt herausgefunden, dass das anbinden an einen Port kleiner 1024 funktioniert - wenn ich root bin, logischerweise. Darüber nicht. Auch nicht als root. Was funktioniert ist, dass ich lokal an diesen port verbinden kann, nicht aber von einem anderen Rechner (im selben Netzwerk).
Ich hab schon diverse HOWTOs etc. gegoogled und nirgendwo eine Antwort gefunden, kann es sein, dass das irgendeine verquere Einstellung an meinem Betriebssystem ist oder liegt's an Python?
Hier zur Verdeutlichung nochmal was das Problem ist:
Port unterhalb 1024
192.168.2.23, als root
192.168.2.17
Port überhalb
192.168.2.23, egal ob als root oder nicht
192.168.2.23 (Selber Host)
192.168.2.17
Ich versteh das nicht. Das bizarre ist ja vor allen Dingen, dass man auch als root nicht an nen höheren Port binden kann - obwohl über 1024 doch unkritische liegen??
ich hab absolut keine Idee mehr.
Gruß, Warhog
EDIT: In den Beispielen fehlt das anschließende s.listen(5), ich habs in den Scripten drin, daran liegt's also nicht.
ich bastel gerade an einem kleinen XMLRPC-Script und benutze dafür den SimpleXMLRPCServer. Soweit, so gut, lokal funktioniert alles. Als ich dann gerade von einem anderen Rechner 'nen RPC abschickte konnte ich nicht zu dem Server connecten.
Langer Rede kurzer Sinn, nach einigem Testen auch mit den einfachsten Sockets "wo gibt" habe ich jetzt herausgefunden, dass das anbinden an einen Port kleiner 1024 funktioniert - wenn ich root bin, logischerweise. Darüber nicht. Auch nicht als root. Was funktioniert ist, dass ich lokal an diesen port verbinden kann, nicht aber von einem anderen Rechner (im selben Netzwerk).
Ich hab schon diverse HOWTOs etc. gegoogled und nirgendwo eine Antwort gefunden, kann es sein, dass das irgendeine verquere Einstellung an meinem Betriebssystem ist oder liegt's an Python?
Hier zur Verdeutlichung nochmal was das Problem ist:
Port unterhalb 1024
192.168.2.23, als root
Code: Alles auswählen
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.2.23", 84)) # funktioniert
Code: Alles auswählen
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.2.23", 84)) # funktioniert
192.168.2.23, egal ob als root oder nicht
Code: Alles auswählen
# socket importieren und aufsetzen
s.bind(("192.168.2.23", 8117)) # kein fehler
Code: Alles auswählen
# socket importieren und aufsetzen
s.connect(("192.168.2.23", 8117)) # kein fehler, tut
Code: Alles auswählen
# ...
s.connect(("192.168.2.23", 8117))
# fehler, connection refused
ich hab absolut keine Idee mehr.
Gruß, Warhog
EDIT: In den Beispielen fehlt das anschließende s.listen(5), ich habs in den Scripten drin, daran liegt's also nicht.