Seite 1 von 1

Portlistening - Knoten im Kopf

Verfasst: Dienstag 25. Oktober 2005, 09:20
von Gunnar
Hallo Pythons,

ich habe mich mal wieder völlig verfranst. Bei dem Versuch einen Service zu erstellen, der ( später einmal :wink: ) auf einem bestimmten Port lauscht und dann Anfragen einfach zu einem anderen System durchleitet, stoße ich schon in den Grundzügen auf folgendes Problem :

Es würde mir reichen, wenn er mir die Startseite von Google anzeigt. Leider kommen aber nur ein paar Daten an. Hat jemand eine Idee, WO ich hier den Denkfehler mache ?

Danke,
Gunnar

Code: Alles auswählen

# -*- coding: cp1252 -*-

# Bibliothek importieren
from socket import *
import Queue

class portlistening:

    def __init__(self):

        #Queue für die Daten erstellen
        self.dataqueuec = Queue.Queue()
        self.dataqueues = Queue.Queue()

        # Sockets oeffnen
        clients = socket(AF_INET, SOCK_STREAM)
        servers = socket(AF_INET, SOCK_STREAM)
        
    
        # Socket an Port binden
        clients.bind(('', 30000))
        
        # maximal fuenf Verbindungen zwischenpuffern
        clients.listen(5)

        while 1:
            # auf naechste Verbindung warten
            clientsock,addr = clients.accept()
            print "connect from", addr
            servers.connect(("www.google.de", 80))
            if clientsock: break

        while 1:
           
            #Daten vom Client bekommen und in Queue schreiben
            self.recvdatac(clientsock)
            # Daten zum Server schicken
            self.senddatac(servers)
            #Daten vom Server bekommen und in Queue schreiben
            self.recvdatas(servers)
            # Daten zum Client schicken
            self.senddatas(clientsock)

        
    # Funktionen zum Empfangen und Senden der Daten
    def recvdatac(self, conn):
            data = conn.recv(100000)
            self.dataqueuec.put(data, False, -1)

    def senddatac(self, conn):
            data = self.dataqueuec.get(False, -1)
            conn.send(data)

    def recvdatas(self, conn):
            data = conn.recv(100000)
            self.dataqueues.put(data, False, -1)

    def senddatas(self, conn):
            data = self.dataqueues.get(False, -1)
            conn.send(data)

if __name__ == "__main__":
    x = portlistening()
    

Verfasst: Dienstag 25. Oktober 2005, 12:34
von cime
hallöche,

um an die google-web-site ranzukommen verwendest du am besten die urllib .... damit geht das alles einfacher und es funzt (... es geht auch mit socket, aber da hab ich nicht mehr im kopf wie ....)

mfg cime

Verfasst: Dienstag 25. Oktober 2005, 13:28
von jens

Verfasst: Dienstag 25. Oktober 2005, 14:53
von Gunnar
Jo, wenn es nur um Websites gehen würde wäre es ok. Das ist eigentlich nur zum testen. Später sollen Anwendungen darüber laufen können...

Bei weiteren tests habe ich es geschafft heise.de aufzurufen, während Google.de weiterhin nur halb ging.
Ich schätze mal es scheitert unteranderem auch daran, dass die Daten alle zu einem String konvertiert werden.

Gibt es eine Möglichkeit, zwei offene Sockets miteinander zu verbinden ( eben eine klassische Weiterleitung ). Sonst komme ich da nicht weiter :/

Danke, Gunnar