Erweiterten Netzwerk-Proxy-Server erstellen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hallo,

Das was Du machen möchtest, lässt sich mit dem JANA-Server als Web-Proxy erreichen. Allerdings müsstet Ihr dann einen Server als Proxy einrichten.

http://www.janaserver.de/

Es ist auch eine Zeitsteuerung und Zugriffs-Beschränkung von einzelnen Clients einstellbar. Geht alles sehr Einfach. Habe den sogar in drei Unternehmen am laufen und alle sind zufrieden.

Volker
Benutzeravatar
coder
Beiträge: 204
Registriert: 25.09.2005 17:53
Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850
Wohnort: Deutschland
Kontaktdaten:

Beitrag von coder »

@PureBasic4.0
Kenne das Problem, dass hat mein Vater auch gemacht.. :(
Hab mich aber mal ran gemacht und den Atomic HTTP-Server so modifiziert das man ihn als HTTP-Proxy nutzen kann! Natürlich total unsichtbar :twisted:

(Anmerkung: -nicht sauber Programmiert -Post-Funktion nicht implantiert)

Du könntest natürlich auch einen anderen Proxy benutzen und alle Api-Befehle für SysTray/Window und sonstige Visuelle Sachen hooken und damit aushebeln... (Ist natürlich sehr sehr sehr ... sehr aufwednig)

Hier mal der Coder von meinem Proxy:

Code: Alles auswählen



#File_Log = 2

#Log$ = "Log.log"
#Temp$ = "Temp"
#Error$ = "Error.html"

Procedure WriteLog(Text$)
  ProcedureReturn WriteStringN(#File_Log, FormatDate("%dd.%mm.%yyyy - %hh:%ii:%ss    ", Date())+Text$)
EndProcedure

Procedure DL(URL$, File$)
  ProcedureReturn URLDownloadToFile(URL$, File$)  ;--Bitte auf ändern!!
EndProcedure

If Not OpenFile(#File_Log, #Log$)
  End
EndIf

FileSeek(#File_Log, Lof(#File_Log))

If InitNetwork() = 0
  writelog("Can't initialize the network !")
  End
EndIf

Port = 8080
WriteLog("Port: "+Str(Port))

Global EOL$

EOL$ = Chr(13)+Chr(10)

*Buffer = AllocateMemory(10000)

If CreateNetworkServer(0, Port)
  
  WriteLog("Server gestartet")
  
  Repeat
    
    Repeat
      WEvent = WindowEvent()

      If WEvent = #PB_Event_CloseWindow : Quit = 1 : EndIf
    Until WEvent = 0
    
    SEvent = NetworkServerEvent()
  
    If SEvent
      ClientID.l = EventClient()
  
      Select SEvent
      
        Case 1  ; When a new client has been connected...
          
        Case 4  ; When a client has closed the connection...
  
        Default
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000)
          Gosub ProcessRequest
          
      EndSelect

    Else
      Delay(20)  ; Don't stole the whole CPU !
    EndIf
    
  Until Quit = 1 
    
  CloseNetworkServer(0)
Else
  WriteLog("Error: can't create the server (port in use ?).")
EndIf
  
End 



Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$)

  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length

  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length

  ProcedureReturn *Buffer
EndProcedure


ProcessRequest:

  a$ = PeekS(*Buffer)

  If Left(a$, 3) = "GET"

    MaxPosition = FindString(a$, Chr(13), 5)
    Position = FindString(a$, " ", 5)
    If Position < MaxPosition
      RequestedFile$ = Mid(a$, 5, Position-5)      ; Automatically remove the leading '/'
      RequestedFile$ = RTrim(RequestedFile$)
    Else
      RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent..
    EndIf
      
      Debug RequestedFile$
      
      If FindString(LCase(RequestedFile$), "server.shutdown", 0)
        WriteLog("Server wird beended")
        End
      EndIf
      
      DL(RequestedFile$, #Temp$)
      WriteLog(IPString(GetClientIP(ClientID))+" request "+RequestedFile$)
      ; Test if the file exists, and if not display the error message
      ;   

      If ReadFile(0, #Temp$)
      
        FileLength = Lof(0)
        
        Ext$ = LCase(GetExtensionPart(StringField(RequestedFile$, 1, "?")))
        
        Select Ext$
          Case "gif"
            ContentType$ = "image/gif"

          Case "jpg"
            ContentType$ = "image/jpeg"

          Case "txt"
            ContentType$ = "text/plain"

          Case "zip"
            ContentType$ = "application/zip"
            
          Case "html"
            ContentType$ = "text/html"
            
          Case "htm"
            ContentType$ = "text/html"
          
          Case "php"
            contentType$ = "text/html"

          Default
            ContentType$ = "application/"+ext$

        EndSelect
        
        *FileBuffer   = AllocateMemory(FileLength+200)
        *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)

        ReadData(0, *BufferOffset, FileLength)

        CloseFile(0)
 
        SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
        FreeMemory(*FileBuffer)
      Else
        If ReadFile(0, #Error$)
          FileLength = Lof(0)
          ContentType$ = "text/html"

          *FileBuffer   = AllocateMemory(FileLength+200)
          *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)

          ReadData(0, *BufferOffset, FileLength)
          CloseFile(0)
   
          SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
          FreeMemory(*FileBuffer)
        EndIf
      EndIf
  EndIf
  
  DeleteFile(#Temp$)
  
Return
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@coder: wow - da kommt ne meennnggee arbeit auf mich zu
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich denke, ein Hardware-Reset des Routers (bzw des Geräts mit der Firewall) wäre weitaus praktikabler... :roll:
Benutzeravatar
R4z0r1989
Beiträge: 521
Registriert: 12.06.2005 18:06
Kontaktdaten:

hmmm

Beitrag von R4z0r1989 »

ja schon aber manche leute wie ich haben das problem dass wenn sie einfach hinten auf den reset knopf drücken die daten futsch sind und die hab ich ned!!!

Da hab ich mich lieber mal nen Tag hingesetzt und hab am Router passwörter durchprobiert, und siehe da es hat geklappt!

jetzt bin ich herr über mein internet!!!
Nefti
Beiträge: 5
Registriert: 07.09.2007 00:48
Kontaktdaten:

Beitrag von Nefti »

entweder ich steh auf dem schlauch oder ich hab das problem net richtig verstanden.
warum willst du den proxy-server unbedingt auf dem PC deines vaters laufen lassen?
nimm einfach einen public-proxy (dein isp besitzt sowas sicher) der nicht auf port 80 läuft (die meisten laufen eh auf 8080 oder 3128)

solche proxyserver findest du im google oder z.b hier: http://www.publicproxyservers.com/page1.html
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi Nefti,

und wie soll das funktionieren??

der weg mit den proxy auf vaters rechner ist schon der richtige!

jpd
PB 5.10 Windows 7 x64
Nefti
Beiträge: 5
Registriert: 07.09.2007 00:48
Kontaktdaten:

Beitrag von Nefti »

kann man auch machen, macht aber wenig sinn

vaters rechner hängt ja vor dem router, d.h wenn er mit alternativen ports auf diesen rechner kommt, dann kommt auch mit alternativen ports raus ins netz.
also ist der weg über vaters rechner prinzipiell unnötig.

was du natürlich auch noch machen kannst ist einen keylogger auf vaters rechner zu installieren und ihn dann dazu zu bringen sich am router einzuloggen :-)
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi Nefti,

so wie ich verstehe ist der w-lan/router für PC2 beschränkt, das bedeutet kein weg zum internet über standard gateway und keine nahmensauflösung....


PC1 (papi) ist im netz aber kann nicht als gateway zum internet dienen da es möglicherweise kein sharing der verbindung konfiguriert ist! ... also kein weg zum internet..


also mögliche lösungen...

1 Profi proxy server verwenden (jana) super teil.
2 selbgemacht ... coder :allright:

3 a la Badboy99: :lol:
Da hab ich mich lieber mal nen Tag hingesetzt und hab am Router passwörter durchprobiert, und siehe da es hat geklappt!

jetzt bin ich herr über mein internet!!!


4 wie du gerade sagst keylogger...


ist es eigentlich nicht einfacher papa klar zu machen das
die stunde Internet pro tag nicht ausrreichend ist ??

Ciao
jpd
PB 5.10 Windows 7 x64
Nefti
Beiträge: 5
Registriert: 07.09.2007 00:48
Kontaktdaten:

Beitrag von Nefti »

PureBasic4.0 hat geschrieben:es ist nur port 80 (Browser) und port 21 (FTP) geblockt. alles andere ist frei
das sagt mir, dass namensauflösung, usw. funzt
Antworten