Verschlüsselter FTP-Upload

Afritus

Mitglied
Hi Leute!
Ich kann nun eine Datei ganz einfach auf einen FTP-Server hochladen mit folgendem Befehl:
Code:
My.Computer.Network.UploadFile( _
 "test.txt", _
 "ftp://ftp-server/test.txt", "user", "password", False, 25000)

Nun kann man aber mit Programmen wie SniffPass (loggt Netzwerkverkehr mit) ganz einfach den Benutzernamen bzw. das Passwort des FTP-Server herausfinden, auf den die Datei hochgeladen wird. So könnten fremde Benutzer meines Programmes die FTP-Daten meines FTP-Servers herausfinden.
Nun wollte ich fragen, wie man Benutzername und Passwort so verschlüsseln kann, dass die Datei ohne Probleme hochgeladen wird und gleichzeitig via z.B. SniffPass niemand das Passwort herausfinden kann...

MfG
Markus
 
Vielen Dank erstmal für die schnellen Antworten!

Ich habe nun FtpWebRequest verwendet (falls es das is, denke schon):
Code:
Dim clsRequest As System.Net.FtpWebRequest = _
            DirectCast(System.Net.WebRequest.Create("ftp://server/test.txt"), System.Net.FtpWebRequest)
        clsRequest.Credentials = New System.Net.NetworkCredential("user", "password")
        clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

        Dim bFile() As Byte = System.IO.File.ReadAllBytes("test.txt")

        Dim clsStream As System.IO.Stream = _
            clsRequest.GetRequestStream()
        clsStream.Write(bFile, 0, bFile.Length)
        clsStream.Close()
        clsStream.Dispose()

Ich verstehe aber leider nicht, wie ich das auf EnableSSL stelle (FTP-Daten lassen sich mit der obigen Version weiterhin herausfinden). Außerdem ist mir nicht ganz klar, was der .NET Reflector damit zu tun hat. Sry für meine Dämlichkeit was Visual Basic anbelangt ;)
 
Wenn du auf EnableSsl klickt, hast ein Beispiel damit. ;)

Konstantin meinte, dass sich das Passwort mit Reflector rausfinden lässt, da es in deiner Assembly (deinem kompilierten Programm) unverschlüsselt steht.
Wenn du das Programm nicht weitergibst, ist das jedoch kein Problem. ;)


Hi Konstantin. Gratulation zum Sonderpreis bei den dotnet-snippets ^^
 
Ich habe den Einbau dieses EnableSSL in jeglichen Varianten ausprobiert, doch zeigt es mir bei der Ausführung des Programmes immer sofort einen Fehler an, obwohl in Visual Studio kein Fehler gefunden wurde.
Hier meine Version:
Code:
Dim instance As Net.FtpWebRequest
    Dim value As Boolean
   
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        value = instance.EnableSsl

        instance.EnableSsl = value

        Dim clsRequest As System.Net.FtpWebRequest = _
            DirectCast(System.Net.WebRequest.Create("ftp://server/test.txt"), System.Net.FtpWebRequest)
        clsRequest.Credentials = New System.Net.NetworkCredential("user", "password")
        clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
       
        Dim bFile() As Byte = System.IO.File.ReadAllBytes("test.txt")
        
        Dim clsStream As System.IO.Stream = _
            clsRequest.GetRequestStream()
        clsStream.Write(bFile, 0, bFile.Length)
        clsStream.Close()
        clsStream.Dispose()

    End Sub

Folgender Fehler (beim Zugreifen auf "value = instance.EnableSsl"):
Code:
NullReferenceException wurde nicht behandelt.
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Ok, mit Programmen wie .NET Reflector tut sich da ein zweites großes Problem auf, da ich sehr wohl vorhabe, das Programm weiterzugeben. Es wird in Zukunft wahrscheinlich von einigen Tausend Leuten verwendet werden... Und ich übertreibe nicht. Würde mir also am Herzen liegen, wenn das Passwort auch mit .NET Reflector nicht herausgefunden werden kann, aber dafür muss ich wohl ein neues Thema aufmachen, oder?^^
Vielen Dank einstweil
 
Zuletzt bearbeitet:
Naja du hast noch kein FtpWebRequest-Objekt erzeugt, deswegen kommt der Fehler. Du musst das New-Keyword verwenden um eine Instanz zu erstellen! (oder System.Net.WebRequest.Create)
Code:
clsRequest.EnableSsl = True
könnte funktionieren.
 
Hab das clsRequest.EnableSsl = True nun zur Sicherheit sogar mehrmals eingebaut. Wenn ich ein "New" vor instance.EnableSsl oder vor Value setze, zeigt er mir an, dass der jeweilige Typ nicht definiert ist. Und System.Net.WebRequest.Create ist doch schon drinnen:

Code:
Public Class Form1
  
    Dim instance As Net.FtpWebRequest
    Dim value As Boolean
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        value = instance.EnableSsl

        instance.EnableSsl = value

        Dim clsRequest As System.Net.FtpWebRequest = _
            DirectCast(System.Net.WebRequest.Create("ftp://server/test.txt"), System.Net.FtpWebRequest)
        clsRequest.EnableSsl = True
        clsRequest.Credentials = New System.Net.NetworkCredential("user", "password")
        clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
        clsRequest.EnableSsl = True
        ' read in file...
        Dim bFile() As Byte = System.IO.File.ReadAllBytes("test.txt")
        clsRequest.EnableSsl = True
        ' upload file...
        Dim clsStream As System.IO.Stream = _
            clsRequest.GetRequestStream()
        clsStream.Write(bFile, 0, bFile.Length)
        clsStream.Close()
        clsStream.Dispose()

    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        

    End Sub
End Class

Danke
 
Code:
value = instance.EnableSsl

instance.EnableSsl = value

Diese 2 Zeilen gehen aber erst nach dem du mit Create das Objekt erstellt hast, kannst aber auch ganz weglassen. ;)
 
Eine Frage hätte ich noch, ist es möglich, ohne eine teure Library mit SFTP hochzuladen?
Also ein VB.NET-Code der eine Datei via SFTP hochlädt?

Vielen Dank

EDIT: Habs jetz doch hinbekommen. Falls es wen interessiert, es klappt sehr gut mit der kostenlosen Library SharpSSH.
 
Zuletzt bearbeitet:
Zurück