Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:07

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: einfacher CGIHTTPServer mit Python realisieren.
BeitragVerfasst: Do Feb 03, 2005 11:05 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Zum lokalen Testen von Webseiten/CGI kann man mit Python einen eigenen Webserver einfach aufmachen...

Einfach den Pfad in chdir() ändern, oder das chdir() auskommentieren und das ganze Skript in's Root-Verzeichnis deiner lokalen kopie der Webseite kopieren und von da aus Starten. Dann kann man mit dem Browser den Server mit der URL "http://localhost" erreichen...

Code:
#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-

import CGIHTTPServer
import BaseHTTPServer
import os, sys
import webbrowser

# Zum Root-Verzeichnis der Webseite wechseln
# (Das Verz. mit der Einstiegts-"index.html" Seite)
os.chdir("/daten/MeineWebseite")

# Verz. in dem CGIs ausgeführt werden sollen. Leer lassen (="") für alle Verz.
cgiVerz = ""

# Port auf dem der Server anfragen entgegen nehmen soll.
ListenPort = 80

# Umgebungsvariablen setzten, die man in CGI-Skripten abfragen kann und normalerweise
# von einem echten WebServer automatisch gesetzt werden
# Evtl. selber erweitern ;)
os.environ['DOCUMENT_ROOT']=os.getcwd()
os.environ['HTTP_USER_AGENT']="Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1.0"
os.environ['HTTP_HOST']="localhost"
os.environ['REMOTE_ADDR']="localhost"


class MyHandler(CGIHTTPServer.CGIHTTPRequestHandler):
    "Modifizieren des Ursprünglichen Servers"

    print "Lese Verzeichnisbaum für CGI-Ausführung...",
    # Liste aller Unetrverzeichnisse erzeugen, damit überall CGIs ausgeführt werden.
    cgi_directories = ["/"+i[0].replace("\\","/") for i in os.walk(cgiVerz)]
    print "OK",len(cgi_directories),"Verz. gefunden\n"

    def is_python(self, path):
        "Endungen, die als Python-Skript ausgeführt werden sollen."
        head, tail = os.path.splitext(path)
        return tail.lower() in (".py", ".pyw", ".cgi")

    def is_cgi(self):
        "Ausführen eines Python-Skript"
        path = self.path
        for x in self.cgi_directories:
            i = len(x)
            if path[:i] == x and (path[i+1:] and path[i] == '/'):
                self.cgi_info = path[:i], path[i+1:]
                return True
        return False


httpd = BaseHTTPServer.HTTPServer(("", ListenPort), MyHandler)

print "ROOT-Pfad:", os.getcwd()
print "Starte CGI-HTTP-Server auf Port",ListenPort
print "Seiten sind nun unter [http://localhost:%s] erreichbar!\n" % ListenPort

# Öffne Browser
webbrowser.open_new("http://localhost")

httpd.serve_forever()


Zuletzt geändert von jens am Do Feb 03, 2005 14:34, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 03, 2005 14:31 
Moderator
Benutzeravatar

Registriert: Fr Okt 11, 2002 19:00
Beiträge: 2010
Wohnort: Salzburg
Hi jens,

Code:
import webbrowser

webbrowser.open_new("http://localhost")
 


Gruß

Dookie

_________________
Code:
#!/usr/bin/env python
import this


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 03, 2005 14:33 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Aha... Dann bau ich das mal ein... Danke!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 23, 2005 14:45 
User

Registriert: Mi Okt 16, 2002 21:52
Beiträge: 1066
Verbesserung füür den Server, damit er mehrere Anfragen parallel bearbeiten kann:
Code:
import SocketServer,socket
class MyServer(SocketServer.ThreadingTCPServer):
    allow_reuse_address = 1    # Seems to make sense in testing environment
    def server_bind(self):
        """Override server_bind to store the server name."""
        SocketServer.ThreadingTCPServer.server_bind(self)
        host, port = self.socket.getsockname()[:2]
        self.server_name = socket.getfqdn(host)
        self.server_port = port

Einfach anstelle von BaseHTTPServer.HTTPServer nutzen...


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 24, 2005 20:53 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Super, wobei ich jetzt nicht genau was "mehrere Anfragen parallel bearbeiten" in der Praxis heißt...
Da es aber nur so'n kleines Stückchen Code ist, frage ich mich, warum es schon so eingebaut ist...


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 24, 2005 21:01 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13867
jens hat geschrieben:
Super, wobei ich jetzt nicht genau was "mehrere Anfragen parallel bearbeiten" in der Praxis heißt...

Das man beispielsweise zwei Downloads gleichzeitig von dem Server bekommen kann, was sonst ja nicht möglich wäre, der würde sonst so lange blokieren, bis der erste fertig ist.

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 25, 2005 10:59 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Also durchaus Sinnvoll, würde ich mal meinen ;) Ob das irgendwann mal zum Standart gehöhrt???

Ich hab es eingebaut, wobei ich da noch Probleme an andere Stelle hab, s. http://python.sandtner.org/viewtopic.php?p=16069#16069


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 25, 2005 16:06 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13867
jens hat geschrieben:
Also durchaus Sinnvoll, würde ich mal meinen ;) Ob das irgendwann mal zum Standart gehöhrt???

Tut es doch. Ist doch in SocketServer drin.

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 10, 2005 22:13 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Hab nochmal die alten Quellentexte rausgekramt... Dabei ist mit aufgefallen, das os.environ["QUERY_STRING"] nicht richtig gesetzt war... Somit klappte es nicht einen lokalen PyLucid-Test zu fahren... Nun geht's aber...

Wenn ich jetzt dem Server noch beibringen kann, die ErrorDocument aus der htaccess-Datei auszuwerten, könnte es auch mit PyLucid's poormans_modrewrite klappen...

Code:
#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-

__version__ = "0.0.5"

__history__ = """
v0.0.5
    - os.environ["QUERY_STRING"] wird richtig übergeben
"""



import CGIHTTPServer, SocketServer
import os, sys, time, socket


class RedirectStdOut:
    def __init__( self, File, stdoutObj ):
        self.MyStdOut = stdoutObj
        self.File = File

    def write( self, *txt ):
        txt = " ".join([str(i) for i in txt])
        # Auf Konsole Ausgeben
        self.MyStdOut.write( txt )
        # In Log-Datei schreiben
        FileHandle = file( self.File, "a" )
        FileHandle.write( txt )
        FileHandle.close()


class MyRequestHandler( CGIHTTPServer.CGIHTTPRequestHandler ):
    "Modifizieren des Standart RequestHandlers"

    # Damit auch unter Linux, welches fork unterstützt, das Python-CGI-Skript
    # unter dem User ausgeführt wird, mit dem der CGIHTTPServer gestartet wurde
    # und nicht mit User nobody...
    have_fork = False
    have_popen2 = False
    have_popen3 = False

    def is_cgi(self):
        "Modifikation, sodas man im CGI-Verzeichnis ein Dir-Listing bekommt"

        try:
            self.path, query_string = self.path.split("?",1)
        except ValueError:
            query_string = ""

        base, file = os.path.split( self.path )
        if file=="": return False

        base = os.path.normpath( base )
        for x in self.cgi_directories:
            if x == base:
                self.cgi_info = base, file+"?"+query_string
                os.environ['SCRIPT_FILENAME'] = file
                return True
        return False



class MyThreadingServer( SocketServer.ThreadingTCPServer ):
    """
    Verbesserung des Standart Servers:
     - ermöglicht das abarbeiten mehrere Anfragen parallel (z.B. Download mehrere Dateien gleichzeitig)
     - Ermöglicht das einschränken des IP-Bereiches aus denen der Server Anfragen behandelt
    """

    allow_reuse_address = 1    # Seems to make sense in testing environment

    def __init__(self, server_address, request_handler, AllowIPs):
        SocketServer.ThreadingTCPServer.__init__(self, server_address, request_handler)
        self.AllowIPs = [mask.split('.') for mask in AllowIPs]

    def server_bind(self):
        """Override server_bind to store the server name. (Parallele Anfragen)"""
        SocketServer.ThreadingTCPServer.server_bind(self)
        host, port = self.socket.getsockname()[:2]
        self.server_name = socket.getfqdn(host)
        self.server_port = port

    def verify_request(self, dummy, client_address):
        """Checkt ob die IP-Adresse der Anfrage in 'AllowIPs' vorhanden ist"""
        def check_ip(mask):
            for mask_part, ip_part in zip(mask, ip):
                if mask_part != ip_part and mask_part != '*':
                    return False
            return True

        ip = client_address[0].split('.')

        for mask in self.AllowIPs:
            if check_ip(mask):
                return True

        print "IP [%s] not allowed!" % client_address

        # Beugt DOS Attacken vor, in dem die Rückmeldung verzögert und
        # somit CPU-Zeit freigegeben wird.
        time.sleep(1)

        return False




def ServerStart( cgiVerz, ListenPort, AllowIPs, LogFile ):
    if LogFile!=False:
        # Ausgaben in Datei mitloggen:
        sys.stdout = RedirectStdOut( LogFile, sys.stdout )
        sys.stderr = RedirectStdOut( LogFile, sys.stderr )

    print "="*80

    # Umgebungsvariablen setzten, die man in CGI-Skripten abfragen kann und normalerweise
    # von einem echten WebServer automatisch gesetzt werden
    os.environ['DOCUMENT_ROOT']     = os.getcwd()

    # Liste aller Unetrverzeichnisse erzeugen, damit überall CGIs ausgeführt werden.
    print "Lese Verzeichnisbaum für CGI-Ausführung...",
    cgi_directories = [os.path.normpath( os.sep + i[0] ) for i in os.walk(cgiVerz)]
    print "OK",len(cgi_directories),"Verz. gefunden\n"
    #~ for i in cgi_directories: print i

    print "ROOT-Pfad .......................:", os.getcwd()
    if LogFile!=False:
        print "Log-Datei .......................:", os.path.join( os.getcwd(), LogFile )
    print "Starte CGI-HTTP-Server auf Port .:", ListenPort
    print "Zugelassener IP-Bereich .........:", AllowIPs
    print
    print "Seiten sind nun unter [http://localhost:%s] erreichbar!\n" % ListenPort

    # Variablen in MyRequestHandler setzten:
    MyRequestHandler.cgi_directories    = cgi_directories

    httpd = MyThreadingServer( ("", ListenPort), MyRequestHandler, AllowIPs )

    print "*** Server gestartet ***"

    httpd.serve_forever()




if __name__=="__main__":
    cgiVerz = "." # CGI's in jedem Pfad erlauben
    ListenPort = 9000
    AllowIPs = ('127.0.0.1', '192.168.*.*')
    #~ LogFile = "logs\\LogFile.txt"
    LogFile = False # Keine Log erstellen

    ServerStart( cgiVerz, ListenPort, AllowIPs, LogFile )

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 20:47 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Hab nun ein paar Tests mit dem Server gemacht...
Etwas komisch reagiert das ganze, wenn ich in meinen CGI-Skripten änderungen vornehme... Anscheinend wirkt sowas wie ein Cache... Denn die Änderungen werden teilweise erst dann sichtbar, wenn ich den Python-CGIserver beende und wieder neu starte?!?!?

Im Browser hab ich den Cache extra geleert...

EDIT: Ah, ich glaube das ist mein altes Problem: http://www.python-forum.de/viewtopic.php?t=2937 Der Threading-Server ist wohl nicht wirklich einsatzbereit :(

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 14, 2005 09:47 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Also an der Threading-Server Variante scheind es wohl doch nicht zu liegen... Änderungen in den CGI-Sourcen werden auch mit dem BaseHTTPServer.HTTPServer erst wirksam, wenn ich den Server neu starte... :cry:

An welchem Hebel kann ich ansetzten, damit es richtig Funktioniert???

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 14, 2005 10:35 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Das Problem ist auf execfile() zurück zu führen und wohl ehr von allgemeiner Natur, deswegen hab ich es nochmal hierhin "verschoben": http://www.python-forum.de/viewtopic.php?t=3994

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 14, 2005 16:12 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
OK, da das exefile()-Problem wohl erstmal nur umgangen werden kann, wenn subprocess genommen wird, hier eine neue Version:
Code:
#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-

__version__ = "0.0.6"

__history__ = """
v0.0.6
    - Überschreiben der CGIHTTPServer.execfile() damit Skripte nicht per
        execfile() sondern per subprocess ausgeführt werden. Damit alle
        "Sub"-Module immer neu geladen werden.
v0.0.5
    - os.environ["QUERY_STRING"] wird richtig übergeben
"""


import CGIHTTPServer, SocketServer
import os, sys, socket, webbrowser, subprocess



class execscript:
    def __call__( self, scriptfile, dummy ):
        p = subprocess.Popen(
                "%s %s" % ( sys.executable, scriptfile ),
                cwd     = ".",
                shell   = True,
                stdin   = subprocess.PIPE,
                stdout  = subprocess.PIPE,
                stderr  = subprocess.PIPE
            )
        p.stdin = sys.stdin

        sys.stdout.write( p.stdout.read() )
        sys.stderr.write( p.stderr.read() )

# Überschreiben der execscript() Funktion, mit der subprocess-Variante ;)
CGIHTTPServer.execfile = execscript()



class MyRequestHandler( CGIHTTPServer.CGIHTTPRequestHandler ):
    "Modifizieren des Standart RequestHandlers"

    # Damit auch unter Linux, welches fork unterstützt, das Python-CGI-Skript
    # unter dem User ausgeführt wird, mit dem der CGIHTTPServer gestartet wurde
    # und nicht mit User nobody...
    have_fork = False
    have_popen2 = False
    have_popen3 = False


    def is_cgi(self):
        "Modifikation, sodas man im CGI-Verzeichnis ein Dir-Listing bekommt"
        if "?" in self.path:
            script_file, query_string = self.path.split("?",1)
            query_string = "?" + query_string
        else:
            query_string = ""
            script_file = self.path

        script_base, script_filename = os.path.split( script_file )
        if script_filename=="":
            return False

        if os.path.splitext( script_filename )[1] != ".py":
            return False

        script_base = os.path.normpath( script_base )

        # Wird für self.run_cgi() benötigt
        self.cgi_info = script_base, script_filename + query_string

        os.environ['DOCUMENT_ROOT']     = os.getcwd()
        os.environ["SCRIPT_FILENAME"]   = script_filename

        return True # Ist ein "CGI"


class MyThreadingServer( SocketServer.ThreadingTCPServer ):
    """
    Verbesserung des Standart Servers:
     - ermöglicht das abarbeiten mehrere Anfragen parallel (z.B. Download mehrere Dateien gleichzeitig)
     - Ermöglicht das einschränken des IP-Bereiches aus denen der Server Anfragen behandelt
    """

    allow_reuse_address = 1    # Seems to make sense in testing environment


    def __init__(self, server_address, request_handler, AllowIPs):
        SocketServer.ThreadingTCPServer.__init__(self, server_address, request_handler)
        self.AllowIPs = [mask.split('.') for mask in AllowIPs]

    def server_bind(self):
        """Override server_bind to store the server name. (Parallele Anfragen)"""
        SocketServer.ThreadingTCPServer.server_bind(self)
        host, port = self.socket.getsockname()[:2]
        self.server_name = socket.getfqdn(host)
        self.server_port = port

    def verify_request(self, dummy, client_address):
        """Checkt ob die IP-Adresse der Anfrage in 'AllowIPs' vorhanden ist"""
        def check_ip(mask):
            for mask_part, ip_part in zip(mask, ip):
                if mask_part != ip_part and mask_part != '*':
                    return False
            return True

        ip = client_address[0].split('.')

        for mask in self.AllowIPs:
            if check_ip(mask):
                return True

        print "IP [%s] not allowed!" % client_address

        return False




def ServerStart( cgiVerz, ListenPort, AllowIPs ):
    print "="*80
    print "ROOT-Pfad .......................:", os.getcwd()
    print "Starte CGI-HTTP-Server auf Port .:", ListenPort
    print "Zugelassener IP-Bereich .........:", AllowIPs
    print
    print "Seiten sind nun unter [http://localhost:%s] erreichbar!\n" % ListenPort

    httpd = MyThreadingServer( ("", ListenPort), MyRequestHandler, AllowIPs )

    # Öffne Browser
    webbrowser.open_new("http://localhost/index.py")

    httpd.serve_forever()




if __name__=="__main__":
    cgiVerz = "." # CGI's in jedem Pfad erlauben
    ListenPort = 80
    AllowIPs = ('127.0.0.1', '192.168.*.*')

    ServerStart( cgiVerz, ListenPort, AllowIPs )


Dabei gibt es allerdings wieder mal ein anderes Problem, wofür ich eure hilfe brauche!
Und zwar, werden anscheinend keine POST-Formulare korrekt an's CGI geschickt.
Genauer gesagt, liefert cgi.FieldStorage() keine Werte. Aus den cgi.py Sourcen kann man entnehmen, das cgi.FieldStorage() die Daten per stdin liest (Zeile 629). In CGIHTTPServer.py Zeile 294 wird anscheinen stdin irgendwie gefüttert.

Offensichtlich klappt die übertragung der Daten per subprocess nicht richtig...

Kann mir jemand helfen???

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 14, 2005 16:54 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Eine andere Variante mit p.stdin.write( sys.stdin.read() ) funktioniert leider auch nicht, da die Ausführung blockiert wird :(

Ob überhaupt die POST Daten per stdin Übertragen werden?

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 15, 2005 09:27 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Dank newsgroups und Mailliste habe ich eine Lösung meines eigens geschaffenen Problems gefunden...

Und zwar ist es so, das ich den Server vorher in einem anderen Projekt benutzt hab. Da war es wichtig, das CGI-Skripte mit dem User ausgeführt werden, mit dem der Server gestartet ist.
Das ist unter Linux nicht so, da Linux fork bzw. os.setuid() unterstützt. In dem Fall werden Skripte als User nobody ausgeführt. Das kann man in CGIHTTPServer.py in Zeile 204 bzw. 225 sehen.
Deswegen hatte ich im RequestHandler meines Servers diese drei Zeilen drin:
Code:
    have_fork = False
    have_popen2 = False
    have_popen3 = False


Das bedeutet aber auch, das die Skripte immer mit execfile() aufgeführt werden, was eigentlich nur eine Notlösung ist.

Lange Rede kurzer Sinn... Durch das löschen der drei have_*-Zeilen, hat sich mein Problem in Luft aufgelöst.

Sorry, war mein Fehler...

Also hier der Server, der nun richtig klappt:
Code:
#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-

__version__ = "0.0.7"

__history__ = """
v0.0.7
    - subprocess unnötig, da have_fork, have_popen2 und have_popen3 unnötigerweise
        auf False im RequestHandler gesetzt wurden. Das bedeutetet das die CGI
        Skripte immer mit der Notlösung execfile() ausgeführt wurden.
v0.0.6
    - Überschreiben der CGIHTTPServer.execfile() damit Skripte nicht per
        execfile() sondern per subprocess ausgeführt werden. Damit alle
        "Sub"-Module immer neu geladen werden.
v0.0.5
    - os.environ["QUERY_STRING"] wird richtig übergeben
"""


import CGIHTTPServer, SocketServer
import BaseHTTPServer
import os, sys, socket, webbrowser


class MyRequestHandler( CGIHTTPServer.CGIHTTPRequestHandler ):
    """Modifizieren des Standart RequestHandlers"""

    def is_cgi(self):
        """
        Einfachere Variante, sodas alle Python-Skripte überall ausgeführt werden#
        """

        base, filename = os.path.split( self.path )

        if ".py" in filename:
            if "?" in filename:
                os.environ["SCRIPT_FILENAME"] = filename.split("?",1)[0]
            else:
                os.environ["SCRIPT_FILENAME"] = filename

            os.environ['DOCUMENT_ROOT']     = os.getcwd()
            self.cgi_info = base, filename
            return True

class MyThreadingServer( SocketServer.ThreadingTCPServer ):
    """
    Verbesserung des Standart Servers:
     - ermöglicht das abarbeiten mehrere Anfragen parallel (z.B. Download mehrere Dateien gleichzeitig)
     - Ermöglicht das einschränken des IP-Bereiches aus denen der Server Anfragen behandelt
    """

    allow_reuse_address = 1    # Seems to make sense in testing environment


    def __init__(self, server_address, request_handler, AllowIPs):
        SocketServer.ThreadingTCPServer.__init__(self, server_address, request_handler)
        self.AllowIPs = [mask.split('.') for mask in AllowIPs]

    def server_bind(self):
        """Override server_bind to store the server name. (Parallele Anfragen)"""
        SocketServer.ThreadingTCPServer.server_bind(self)
        host, self.server_port = self.socket.getsockname()[:2]
        self.server_name = socket.getfqdn(host)

    def verify_request(self, dummy, client_address):
        """Checkt ob die IP-Adresse der Anfrage in 'AllowIPs' vorhanden ist"""
        def check_ip(mask):
            for mask_part, ip_part in zip(mask, ip):
                if mask_part != ip_part and mask_part != '*':
                    return False
            return True

        ip = client_address[0].split('.')

        for mask in self.AllowIPs:
            if check_ip(mask):
                return True

        print "IP [%s] not allowed!" % client_address

        return False




def ServerStart( ListenPort, AllowIPs ):
    print "="*80
    print "ROOT-Pfad .......................:", os.getcwd()
    print "Starte CGI-HTTP-Server auf Port .:", ListenPort
    print "Zugelassener IP-Bereich .........:", AllowIPs
    print
    print "Seiten sind nun unter [http://localhost:%s] erreichbar!\n" % ListenPort

    httpd = MyThreadingServer( ("", ListenPort), MyRequestHandler, AllowIPs )

    # Öffne Browser
    webbrowser.open_new("http://localhost/index.py")

    httpd.serve_forever()


if __name__=="__main__":
    ServerStart(
        ListenPort  = 80,
        AllowIPs    = ('127.0.0.1', '192.168.*.*')
    )

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de