Mini-Firewall programmieren???



  • Ja, so hatte ich es jetzt am WE auch programmiert. Danke nochmal.

    Jedoch hätte ich dazu noch eine weitere Frage. Bisher funktioniert mein Proxy nur für einen Port. Wenn ich jedoch weitere Ports zulassen, bzw. später evtl. auch wieder ablehnen, möchte, muss ich dann für jeden Port den Großteil meines Programms in einer Schleife durchlaufen lassen um die passenden Sockets zu binden und zu connecten oder gibt es hier eine andere Methode, um mehrere Ports zuzulassen?



  • Ich kenne mit TCP/IP nur die Möglichkeit einen Socket auf genau einen Port zu binden (für listen()). D.h. wenn du einen "transparenten" Proxy schreiben willst, dann wirst du es wohl so machen müssen.
    Schreib dir eine Klasse die das kapselt und instanzier diese dann mehrfach. Entweder verpasst du jedem Socket dann einen eigenen Thread der in der accept Schleife hängt, oder aber du "sammelst" die Sockets in einem FD_SET und wartest dann mit select() auf die nächste Verbindung.

    EDIT: die alternative zu einen transparenten Proxy wäre ein Proxy dem man über ein bestimmtes Protokoll mitteilen muss auf welche IP und welchen Port man sich verbinden möchte. Sowas sie SOCKS z.B. Dann muss allerdings der Client auch dieses Protokoll unterstützen um sich über den Proxy verbinden zu können. In dem Fall bräuchtest du für alles nur einen einzigen Listen-Port.



  • Die zweite Variante sagt mir jetzt leider auch nichts.

    Wie gesagt, meine Überlegungen gingen auch eher in Richtung der ersten, von dir vorgestellten, Möglichkeit.
    Sprich für jeden möglich Port wird ein Thread gestartet, der mit dem jeweiligen Server kommuniziert und mehrere Clients annimt (Ports werden hierbei in einer globalen Variable gespeichert). Die Kommunikation zwischen Clients und Server läuft dann nochmal in einem eigenen Thread ab.

    Jetzt muss jedoch noch realisiert werden, dass ich die möglichen Ports (global) ändern kann, sprich zulassen/ ablehnen. Das sollte jedoch nur passieren, wenn keine Daten auf den Threads laufen die für die Kommunikations zuständig sind. Zum einen muss ich doch den Zugriff auf die globale Variable kontrollieren, evtl. mittels Mutex und dann muss ich ja noch prüfen wann kein Verkehr aktiv ist, oder?



  • Ich weiß nicht, obs wichtige ist und korrigiert mich wenn ich falsch liege, aber wieviele Ports willst du denn behandeln?
    Alle 65535 TCP-Ports? Sind ne ganze menge Threads die da laufen würden.



  • Nein, 2-3 Ports mehr sollen es nicht sein.


Anmelden zum Antworten