Fileserver

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Smily

Betreff: Fileserver

BeitragDo, März 22, 2007 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho,
Ich habe mal einen kleinen Server geschrieben:

Einfach starten und den Localhost per Browser abrufen.
Über das Textfeld kann man noch ein paar anweisungen geben.
Der Server versteht "notify/irgendeinenText" und "exec/IrgendeineAnweisung"

Was bringt das?
kA ^^ aber eine möglichkeit wäre es noch eine Authentifizierungs-Routine einzubauen und das prog im Hintergrund laufen zu lassen.
So kann man seinen eigenen Computer von überall aus Steuern und sich ein paar beliebige Dateien rüberziehen. (man muss nur die IP kennen)

Gruß, Smily0412

Update: Auth-System Hinzugefügt

Code: [AUSKLAPPEN]
Type open
 Field dir$
End Type

pw$ = "Passwort"

Global filestring$ = "[tabs]<img src=img/[img]><a href="+chr$(34)+"[url]"+chr$(34)+">[name]</a><br>"
Global lblpos$
svr = CreateTCPServer(80)
Repeat
   Stream = AcceptTCPStream(svr)
   If Stream
  Repeat
   z$ = ReadLine(Stream)
         If Left(Upper(z$),4)="GET "
        z$ = Replace(z$,"+","%20")
            Pos = Instr(z$, " ", 5)
            req$ = urlencode(Mid$(z$, 6, pos-6))
            sc = 0
            If Left(req$,5) = "?cmd=" Then req=mid$(req,6)
            If Left(req$,6) = "?auth=" Then req="auth/"+mid$(req,7)
         End If
  Until z$ = ""
   If req = "" 
      sendtcpheader(stream)
      WriteLine stream, "<a href=clall>close all</a> | <a href=clsvr>close server</a> | <a href=opall>open all</a> <br>"
      If auth=tcpstreamip(stream)
         WriteLine stream, "Send Command: <form method=GET><input type=text name=cmd><input type=submit value=send></form>"
      Else
         WriteLine stream, "Auth: <form method=GET><input type=password name=auth><input type=submit value=send></form>"
      End If
      
      WriteLine stream, "<hr>"

      If auth=tcpstreamip(stream)
         For byte = 66 To 90
            If FileType(chr$(byte)+":\")
               Select diropen(chr$(byte)+":")
                  Case 0
                     WriteLine Stream, "<img src=/img/drive.gif>"
                     WriteLine Stream, "<a href="+chr$(34)+"open/"+chr$(byte)+":"+chr$(34)+">" + chr$(byte)+":" + "</a><br>"
                  Case 1
                     WriteLine Stream, "<img src=/img/drive.gif>"
                     WriteLine Stream, "<a href="+chr$(34)+"close/"+chr$(byte)+":"+chr$(34)+">" + chr$(byte)+":" + "</a><br>"
                     Writedir(Stream,chr$(byte)+":" , tabs+1, "<br>")
               End select
            End if
         Next
      Else
         WriteLine Stream, "Pleas Auth!"
      End if

   ElseIf Left(req,5) = "open/"
      opendir Mid$(req$,6)
      Sendtcploc(stream,"#lbl")
      lblpos$ = Mid$(req$,6)
      WriteLine stream, ""

   ElseIf Left(req,6) = "close/"
      close Mid$(req$,7)
      Sendtcploc(stream,"#lbl")
      lblpos$ = Mid$(req$,7)
      WriteLine stream, ""

  ElseIf Left(req,4) = "img/"
      sendtcpheader(stream, "image\gif")
      sendfile(stream, req)

   ElseIf Left(req,4) = "get/"
      WriteLine stream, "HTTP/1.0 200 OK"
      name$ = req
      Repeat
         name$ = Mid$(name$,Instr(name$,"\")+1)
      Until Not Instr(name$,"\")
      WriteLine stream, "Content-Disposition: attachment; filename="+chr$(34)+name$+chr$(34)
      WriteLine stream, "Content-Length: " + FileSize(mid$(req,5))
      WriteLine stream, ""
      sendfile(stream, Mid$(req,5))

   ElseIf req = "opall"
      For byte = 66 To 90
         If FileType(chr$(byte)+":\")
            opentree(chr$(byte) + ":")
         End if
      Next
      Sendtcploc(stream)
      
   ElseIf req = "clall"
      Delete Each open
      Sendtcploc(stream)            
   ElseIf req = "clsvr"
      Sendtcpheader(stream)
      WriteLine stream, "OK... bye"
      CloseTCPStream(stream)
      end

   ElseIf Left(req,7) = "notify/"
      Notify Mid$(req,8)
      sendtcploc(stream)
      
   ElseIf Left(req,5) = "exec/"
      ExecFile(Mid$(req,6))
      sendtcploc(stream)

   ElseIf Left(req,5) = "auth/"
      Sendtcploc(stream)
      userpw$ = Mid$(req,6)
      If pw$ = userpw$ Then auth = TCPStreamIP(stream)

   Else
      WriteLine stream, "Unknown Request: " + req

   End if
   CloseTCPStream Stream
   End If
Until KeyHit(1)


Function tree(dir$, file$)
 Fileout = WriteFile(file$)
  Writedir fileout, dir$
 CloseFile fileout
End Function

Function writedir(Fileout, dir$, tabs=0, break$="")
 d = ReadDir(dir$)
 Repeat
  file$ = NextFile(d)
  If Not (file$ = "." Or file$ = ".." Or file$ = "")
   If lblpos$ = dir$+"\"+file$ Then WriteLine fileout, "<a NAME=lbl>"
         Select FileType(dir$+"\"+file$)
          Case 1:
     imgurl$ = "dat.gif"
     url$ = "get/"+dir$+"\"+file$
          Case 2:
             Select diropen(dir$+"\"+file$)
            Case 0
       imgurl$ = "folder.gif"
       url$ = "open/"+dir$+"\"+file$
                Case 1
           imgurl$ = "opnfolder.gif"
       url$ = "close/"+dir$+"\"+file$
     End select
         End select
   ret$ = filestring$
   ret$ = Replace(ret$,"[tabs]",String("&nbsp;",tabs*4))
   ret$ = Replace(ret$,"[img]",imgurl$)
   ret$ = Replace(ret$,"[url]",url$)
   ret$ = Replace(ret$,"[name]",file$)   
   If FileType(dir$+"\"+file$) WriteLine fileout, ret$
   If diropen(dir$+"\"+file$) writedir(fileout, dir$+"\"+file$, tabs+1)
         If FileType(dir$+"\"+file) = 2 And diropen(dir$+file$) Then Writedir(fileout, dir$+"\"+file$, tabs+1, break$)
  EndIf
 Until file$ = ""
 CloseDir d
End Function

Function Sendtcpheader(stream, Typ$ = "Text/html", extra$="")
   WriteLine stream, "HTTP/1.1 200 OK" 
   WriteLine stream, "Cache-Control: private" 
   WriteLine stream, "Content-Type: " + typ$
   WriteLine Stream, "Server: Filesrv"
 If extra$ <> "" writeline Stream, extra$
   WriteLine stream, "" 
End Function

Function Sendtcploc(stream,extra$="")
   WriteLine stream, "HTTP/1.0 302 Moved Temporarily"
   WriteLine stream, "Location: .."+extra$
   WriteLine stream, "" 
End Function

Function diropen(dir$)
 For open.open = Each open
  If Lower(open\dir$) = Lower(dir$) Return 1
 Next
 Return 0
End Function

Function opendir(dir$)
 If dir$ = CurrentDir$() Then
 else
  open.open = New open
  open\dir$ = dir$
 End if
End function

Function close(dir$)
 For open.open = Each open
  If open\dir$ = dir$ Then Delete open.open
 next
End function

Function Sendfile(Stream, file$)
 file$ = Replace(file$,"/","\")
   Filein = ReadFile(file$)
   If Not filein WriteLine stream, "404":writeline stream, CurrentDir() +"\" + file$ + " Not found": return

   size = FileSize(file$)
   bank = CreateBank(size)
 ReadBytes(bank,filein,0,size)
 WriteBytes(bank,stream,0,size)

 CloseFile filein
End Function

Function urlencode$(s$)
 For x = 1 To Len(s$)
  b$ = Mid$(s$,x,1)
  If b$ = "%"
   ret$ = ret$ + Chr$(hzd(mid$(s$,x+1,2)))
   x = x + 2
  Else
   ret$ = ret$ + b$
  End if
 Next
 Return ret$
End Function

Function hzd(h$)
 For q=1 To Len(h)
  zwischenwert=Asc(Upper(Mid(h,q,1)))-48
  If zwischenwert>9 zwischenwert=zwischenwert-7
  wert=wert*16+zwischenwert
 Next

 Return wert
End Function

Function opentree(dir$)
 opendir(dir$)
 d = ReadDir(dir$)
 Repeat
  file$ = NextFile(d)
  If Not (file$ = "." Or file$ = ".." Or file$ = "")
   If FileType(dir$+"\"+file$) = 2 Then opentree(dir$+"\"+file$)
  End if
 Until file$ = ""
 CloseDir d
End function
  • Zuletzt bearbeitet von Smily am Do, März 22, 2007 21:05, insgesamt einmal bearbeitet

StepTiger

BeitragDo, März 22, 2007 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Bau mal ein Passwort rein. So kann jeder auf alle Daten zugreifen.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Smily

BeitragDo, März 22, 2007 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
StepTiger hat Folgendes geschrieben:
Bau mal ein Passwort rein. So kann jeder auf alle Daten zugreifen.


Ok hab ich gemacht.

Gruß, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

StepTiger

BeitragDo, März 22, 2007 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön. Am besten noch ein Timout Script und eine verschlüsselte Übertragung des Passwortes und fertig ist das. Smile
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Smily

BeitragFr, März 23, 2007 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei der Verschlüsselten Übertragung sehe ich ein kleines Problem:

Das Empfangene von Server zu Entschlüsseln ist ja kein Problem, aber wie überrede ich den Browser dazu, die Daten verschlüsselt zu schicken?

mfg, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group