FTP-Downloads Speichern ??

  • VB.NET
  • .NET (FX) 4.0

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Thunderbolt.

    FTP-Downloads Speichern ??

    Hallo, ich habe ein kleines Programm geschrieben was u.a. Programme von meinem FTP-Server Runter lädt und speichert....

    Jedoch Lädt es nur runter... sobald es fertig ist mit laden, verschwindet die Datei wieder aus dem Ordner und ich weiß einfach nicht, warum ...
    falls mir jemand helfen könnte, hier ist der Code ...

    Hoffe Jemand ist schlauer als ich und Findet den Fehler ^^,
    Vielen Dank :)

    Quellcode

    1. 'Runterladen & Speichern'
    2. Try
    3. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    4. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    5. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    6. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    7. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    8. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    9. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    10. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    11. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    12. My.Computer.Network.DownloadFile("ftp://[NAME].bplaced.net/[Ordner]/[DateiName].exe", "[Pfad]\[DateiName].exe", "[BenutzerName]", "[Passwort]", False, 60000, True)
    13. Catch
    14. End Try

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Senio“ ()

    dann muss ich den Satz zurückwerfen:
    Dieses Programm ist nur für mich und ein paar Kollegen, daher Sicherheit, wayne.

    es soll funktionieren, nicht mehr und nicht weniger ;)
    vor allem das mit den Passwörtern ist eh total dumm, ich meine .. Passwort, ftp ... muss ich noch was sagen ^^
    Sicherheit sollte NIE vernachlässigt werden. Sonst haben deine Kollegen Viren, Trojaner oder andere Malware auf dem Rechner und du Warez auf deinem Server/Webspace...
    Oder ein anderes Szenario: Dein Kollege hat bereits Spyware installiert und der Angreifer klaut dein Programm.

    Du kannst nicht den Inhalt des Ziels beider Links in vier Minuten gelesen und verstanden haben. Ich hab dann noch was: Sicherheitsrisiken bei der Verwendung von Ftp und Datenbanken
    Mit freundlichen Grüßen,
    Thunderbolt
    1. sie bzw wir könnten nur Viren (u.a. Trojaner etc.) bekommen, wenn jemand sich in den FTP Server hackt und dort eine Datei durch die Viren-verseuchte austauscht, oder einer von uns dort etwas Viren-verseuchtes hochladet.
    (Da es über einen FTP-Server Läuft, ist dort der Schutz Faktor eh so gut wie 0 )
    2. Ob sich Jemand mein Programm klaut ist mir auch relativ egal ...

    3. a) doch hab ich ..
    b) (auch wenn das bei mir nicht der Fall ist,) es gibt menschen die können sich Texte etc., relativ schnell merken (bestes bsp. Photografisches Gedächtnis .. )

    4. könnten wir das Thema "Sicherheit" jetzt dennoch weglassen, und wieder zu meinem Problem kommen, dass es die Dateien nicht speichert ?
    Danke :)
    Nein, können wir leider nicht.
    Was passiert, wenn die Datei abhanden kommt und ich Sie durch Umwege habe? Ich schnappe mir das FTP-Kennwort aus der Datei und tausche die Dateien auf dem FTP-Server durch Spyware aus.

    Toll. Lass solche Späße. Für Update Routinen kann ich nur immer wieder zu UpdateSystem.net raten, ansonsten bitte nur machen, wenn man genau weiß, was man tut. (und nein, mit FTP kann das in KEINEM Falle die richtige Lösung sein)
    es soll kein "Updater" sein, daher bringt mir die UpdateSystem.net nichts.
    FTP ist nicht die perfekte Lösung aber es ist die schnellste und einfachste Lösung.
    und wenn du an die Datei kommst, kannst du gerne die Datei auf dem Server austauschen und ne Spyware reinhauen wenn du denn umbedingt möchtest ;P

    ABER ich bin eigentlich hier ins Forum gekommen, weil ich gedacht habe, dass mir hier jemand sagen kann warum es nicht richtig speichert. und nicht damit ich ne Standpauke über Sicherheit bekomme ...
    also, wenn ich bitten dürfte, nur noch "hilfreiche" Antworten.
    Alle bisherigen Antworten sind sowas von hilfreich.

    Wenn du den Links gefolgt wärst, hättest du festgestellt, dass es nicht primär darum geht, die Datei auf dem Server zu manipulieren, sondern auf dem Weg von Server zum Client.
    Mit freundlichen Grüßen,
    Thunderbolt
    1.) Als erstes mache das Try Catch weg, du willst Fehlermeldungen bekommen um zu wissen wieso es nicht funktioniert.
    2.) Vergiss den My-Namespace, der ist aus den alten VB06 Zeiten.
    Nutze die Alternativen von System.Net.WebClient... Downloadfileasync
    Google einfach. ;)
    Moin,

    Senio schrieb:

    endlich mal eine Gute Antwort

    das bezweifle ich, dass es die einzige war. Nur, weil die obigen Antworten Sicherheitstipps waren, die Dir nicht zusagen, sind sie noch lange nicht schlecht o. ä. Dass Du dies damit andeuten wolltest, davon gehe ich mal aus...
    Ich kann es nur auch bestätigen: Schaue, dass Du Dich da dran hältst, das kann u. U. böse enden. Nimm' ggf. solche Tipps an und sichere Dich und Deine Software nat. dagegen ab, das ist primär am Wichtigsten, deshalb wurde auch mit diesem Punkt/diesen Punkten angefangen und dann kann man darauf aufbauen. Das sichert nur ab, dass das Ganze wirklich keinen Schaden verursachen kann.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    hmm es löscht die datei jetzt nichtmehr sofort nach beenden des downloads aber sie hat 0kb speicher und startet logischer weise auch nicht ...
    ist der text so richtig oder ist da etwas falsch ?

    VB.NET-Quellcode

    1. Try
    2. w.DownloadFileAsync(New Uri("ftp://Name.bplaced.net/Ordner/Dateiname.exe"), "C:\Program Files\ordner\dateiname.exe")
    3. w.Credentials = New NetworkCredential("Name", "pw")
    4. Catch
    5. MsgBox("fehler" & ErrorToString)
    6. End Try
    @Senio
    Wie ist w deklariert ?

    FTP Tutorial Uploaden und downloaden

    My.Computer.Network.DownloadFile("ftp://www8.subdomain.com/Dateiname+Endung", "Speicherort", "Username", "Passwort")

    ErfinderDesRades schrieb:

    bei sonem unvollständigen Codefragment kann man das nicht sicher beurteilen.

    wenn das zu wenig ist, kann ich ja mal alles posten (auch wenn der rest nichts mit dem letztendlichen problem zutun hat ^^)

    ErfinderDesRades schrieb:

    eventuell guckst du zu früh nach

    es kommt eine msgBox wenns fertig ist also sollte es ansich schon fertig sein ^^

    Wie ist w deklariert ?

    hier jetzt der komplette quelltext ^^,

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net
    3. Public Class Form1
    4. Private WithEvents w As New Net.WebClient()
    5. 'Verschiebe mich in Autostart'
    6. Sub RegisterAutostart(ByVal AppNameWithoutDotExe As String)
    7. Try
    8. If IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) & "\" & AppNameWithoutDotExe & ".exe") Then
    9. Else
    10. My.Computer.FileSystem.CopyFile(AppNameWithoutDotExe & ".exe", Environment.GetFolderPath(Environment.SpecialFolder.Startup) & "\" & AppNameWithoutDotExe & ".exe")
    11. End If
    12. Catch ex As Exception
    13. MsgBox("Fehler!" & ErrorToString())
    14. End Try
    15. End Sub
    16. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    17. 'unnötige meldung'
    18. MsgBox("Starte...")
    19. 'Verstecke mich'
    20. Me.Hide()
    21. 'Pfad erstellen'
    22. My.Computer.FileSystem.CreateDirectory("C:\Program Files\Ordner")
    23. 'Runterladen & Speichern'
    24. Try
    25. w.DownloadFileAsync(New Uri("ftp://[Name].bplaced.net/Ordner/DateiName.exe"), "C:\Program Files\Ordner\Dateiname.exe")
    26. w.Credentials = New NetworkCredential("Benutzername", "Passwort")
    27. Catch
    28. MsgBox("fehler" & ErrorToString)
    29. End Try
    30. 'Starte aus "[Ornder]\"'
    31. Try
    32. Process.Start("C:\Program Files\[Ordner]\DateiName.exe")
    33. Catch
    34. MsgBox("fehler" & ErrorToString)
    35. End Try
    36. 'Schließ mich'
    37. MsgBox("Fertig.", MsgBoxStyle.OkOnly)
    38. Close()
    39. End Sub
    40. End Class
    Also man könnte den Code sehr verbessern - TryCatchens raus, unnötige Leerzeilen und Kommentare raus - das würde zwar anne Funktion nix ändern, aber doch die Wartung sehr erleichtern.
    Auch siehts mir nach Malware aus, so wie da das System manipuliert werden soll.
    Und per Ftp öffnet das ja Angreifern riesen-Scheunentore.
    Die sniffen dein Proggi und kriegen so die Ftp-Credentials, und dann können sie dein Webspace kapern - ich glaub da gibts inzwischen auch Bots für im Netz.
    Jo, und dann kann man zB. deine Exe modifizieren, und einen Virus oder Virus-Downloader injizieren, und schon hat man sein Bot-Netz um 1 Server und viele Clients erweitert - vielen Dank und frohe Weihnachten :thumbdown: !

    Aber damit das funktioniert, sollteste w.DownloadFileAsync mal probieren mittm Await-Schlüsselwort aufzurufen - Async-Methoden sind dafür konzipiert.
    Gugge vlt. Async, Await und Task
    Dass das hier eine gewaltige Sicherheitslücke ist, wurde bereits oben mehrmals gesagt, aber der TE scheint dies leider zu ignorieren, von daher können wir dann ja nichts dafür...

    Ein paar Tipps zum Code gäbe es auch noch:
    ​Path.Combine beutzen, My-Namespace vermeiden und System.IO nutzen, Controls gescheit benennen, damit man sie wiedererkennt und die Architektur somit etwas verbessert wird, VB6-Zeugs rauswerfen und mit modernen .NET-Sachen ersetzen, z. B. ​MsgBox -> ​MessageBox.Show. Vorerst auch mal das Try-Catch-Zeugs entfernen und dann später einfügen, wen es geht und zwar auf richtige Weise: Bestimmte Exceptions behandeln und deren StackTrace etc. irgendwo mitliefern, damit man weiß, was los ist.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    ErfinderDesRades schrieb:

    Auch siehts mir nach Malware aus, so wie da das System manipuliert werden soll.

    ... weil es mit des direkt in den Autostart ziehen soll oder warum ^^ ??
    und zu dem await, werde das mal testen (gehe aber davon aus dass es nichts verändert ..)

    und die Leerzeilen und Kommentare raus .. ich habs lieber so ein wenig übersichtlicher :)

    //EDIT: Das Await löst das problem leider auch nicht

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Senio“ ()

    Quellcode

    1. w.DownloadFileAsync(New Uri("ftp://[Name].bplaced.net/Ordner/DateiName.exe"), "C:\Program Files\Ordner\Dateiname.exe")
    2. w.Credentials = New NetworkCredential("Benutzername", "Passwort")
    3. Catch
    4. MsgBox("fehler" & ErrorToString)
    5. End Try
    6. 'Starte aus "[Ornder]\"'
    7. Try
    8. Process.Start("C:\Program Files\[Ordner]\DateiName.exe")


    Aber NEIN! Natürlich, kein Updater.
    Sondern nur die Remote-Code-Execution Backdoor in deinem Code? Oder was wird das?
    Was genau unterscheidet diese Routine von einem Updater?
    Und außerdem: Lade doch BITTE wenigstens die Datei via HTTP runter, wenn du schon sowieso bei bplaced hostet. +

    Formulierung etwas entschärft. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()