UpdateSystem Ordner vom Webspace downloaden lassen ?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 75 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Hier, vllt. hilft er ja.

    Ich hatte ihn mir nicht direkt angeschaut sollte aber wenn ich denke was du suchst, helfen. Ich hab die Datei mal entfernt.
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sayem“ ()

    Ich glaube schon dass man da .zip Dateien downloaden kann, denn das sind ja keine Verzeichnisse sondern eher Dateien. Man kann auch auf einer Website keine Ordner downloaden, sonst müsste nicht jede Website ihre Dateien als .zip oder einzeln anbieten (entwickle ja auch selbst Websites). Und das gleiche geht auch so mit .rar, .7zip usw.


    Bearbeitung:
    sry. das kam wohl etwas spät...
    There are only 10 types of poeple in the world: Those who understand binary and those who don't.

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

    @Sayem Ist sicher gut gemeint und Du kannst auch nichts dafür, weil Du es ja nicht geschrieben hast, aber ich habe mir das mal angeschaut ;):
    Versionen als Strings zu behandeln ist keine gute Idee, hierfür gibt es die Version-Klasse. Wenn der TE zudem ZIP-Dateien oder sonstige Archive lädt, ist das eine Sicherheitslücke und gefährlich, da die Echtheit der Daten bei diesem Patcher nicht geprüft wird, sodass man sich hierdurch als Client einen Virus einfangen könnte.

    Außerdem ist der Code, naja, ungut, da zum Beispiel sowas gemacht wird: CPatcher.Label3.Text, wobei CPatcher eine Form und somit eine Klasse ist => Man behandelt eine Klasse wie ein Objekt und das ist nat. Schwachsinn.
    Weiterhin gab es da auch VB6-Sachen und so Zeugs.

    Wenn man nun den Code verbessern würde, rate ich dem TE das nur zu nutzen, wenn er niemals Archive (.zip, .rar) und auch niemals ausführbare Dateien usw. (.dll, .exe) lädt.

    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 :!:
    @Sayem
    Bitte nicht, wir waren gerade dabei, einigermaßen sauberes Programmieren zu lehren, und das was du da hochgeladen hast ist einfach nur schlecht programmiert. (Nicht mal ansatzweise OOP, nichts von Threading gehört (geschweige denn von Tasks), Dialoge werden nicht instanziiert, VB6 Funktionen werden verwendet). Außerdem hilft das hier überhaupt nicht weiter, weil da einfach nur eine zip-Datei gedownloadet wird und soweit waren wir dann auch schon (mit Dateidownloads).
    Mfg
    Vincent

    VincentTB schrieb:

    @Sayem
    Bitte nicht, wir waren gerade dabei, einigermaßen sauberes Programmieren zu lehren, und das was du da hochgeladen hast ist einfach nur schlecht programmiert. (Nicht mal ansatzweise OOP, nichts von Threading gehört (geschweige denn von Tasks), Dialoge werden nicht instanziiert, VB6 Funktionen werden verwendet). Außerdem hilft das hier überhaupt nicht weiter, weil da einfach nur eine zip-Datei gedownloadet wird und soweit waren wir dann auch schon (mit Dateidownloads).



    Ich hab die Datei entfernt, damit er sie nicht lädt. Aber mal als Frage, ich hatte damals um mein Projekt zu realisieren bei der XML so eine Struktur.

    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <PatchList>
    3. <PatchDirectories>
    4. <PatchDirectory>
    5. <Name>Data\Dialogs\ldf4b\ldf4b_li</Name>
    6. </PatchDirectory>
    7. <PatchDirectory>
    8. <Name>Data\Dialogs\ldf4b\ldf4b_da</Name>
    9. </PatchDirectory>
    10. <PatchDirectory>
    11. <Name>Data\Dialogs\idstation</Name>
    12. </PatchDirectory>
    13. <PatchDirectory>
    14. <Name>Data\Dialogs\ldf5b</Name>
    15. </PatchDirectory>
    16. <PatchDirectory>
    17. <Name>Data\Dialogs\idtiamat_reward</Name>
    18. </PatchDirectory>
    19. <PatchDirectory>
    20. <Name>Data\Dialogs\90000~99999</Name>
    21. </PatchDirectory>
    22. <PatchDirectory>
    23. <Name>Data\Dialogs\iddreadgion_02</Name>
    24. </PatchDirectory>
    25. <PatchDirectory>
    26. <Name>Data\Npcs</Name>
    27. </PatchDirectory>
    28. </PatchDirectories>
    29. <PatchFiles>
    30. <PatchFile>
    31. <Name>L10N\DEU\textures\textures.pak</Name>
    32. <Hash>bc9ad0f2d174cdca26b49773915e1f37</Hash>
    33. </PatchFile>
    34. <PatchFile>
    35. <Name>L10N\DEU\textures\Loading\splash04.bmp</Name>
    36. <Hash>ff0d5ac01552f2030d3cf1f135c9acde</Hash>
    37. </PatchFile>
    38. <PatchFile>
    39. <Name>L10N\DEU\textures\Loading\splash01.bmp</Name>
    40. <Hash>ff0d5ac01552f2030d3cf1f135c9acde</Hash>
    41. </PatchFile>
    42. <PatchFile>
    43. <Name>L10N\DEU\textures\Loading\splash03.bmp</Name>
    44. <Hash>ff0d5ac01552f2030d3cf1f135c9acde</Hash>
    45. </PatchFile>
    46. <PatchFile>
    47. <Name>L10N\DEU\textures\Loading\splash02.bmp</Name>
    48. <Hash>ff0d5ac01552f2030d3cf1f135c9acde</Hash>
    49. </PatchFile>
    50. <PatchFile>
    51. <Name>L10N\DEU\textures\Loading\NCSoftCI.bmp</Name>
    52. <Hash>4d51b1628d8af138448920769d2d8b21</Hash>
    53. </PatchFile>
    54. <PatchFile>
    55. <Name>L10N\DEU\data\Strings\stringtable_gg.xml</Name>
    56. <Hash>e89f54d0e9a1153d1b0a86f93e5176e6</Hash>
    57. </PatchFile>
    58. <PatchFile>
    59. <Name>L10N\DEU\data\Strings\error\clienterrormsgs.xml</Name>
    60. <Hash>fd8b67f2f00dddcd8236719ce972588c</Hash>
    61. </PatchFile>
    62. <PatchFile>
    63. <Name>L10N\DEU\data\help\3_2.bik</Name>
    64. <Hash>fe41a572bd5af2c7e7632dbe255545fb</Hash>
    65. </PatchFile>
    66. <PatchFile>
    67. <Name>L10N\DEU\data\help\1_2.bik</Name>
    68. <Hash>5e846e9c607842d25366cf46ed2cab68</Hash>
    69. </PatchFile>
    70. <PatchFile>
    71. <Name>L10N\DEU\data\help\12_1.bik</Name>
    72. <Hash>8304f8b3fcc92a92a5ada9a89162068f</Hash>
    73. </PatchFile>
    74. <PatchFile>
    75. <Name>L10N\DEU\data\help\14_2.bik</Name>
    76. <Hash>89d7ee5d84b35a41207b94bc1b72a90e</Hash>
    77. </PatchFile>
    78. </PatchList>


    Hättet ihr eine ähnliche Struktur verwendet, oder was hättet Ihr geändert, da ich jetzt auch nicht unbedingt "perfekt" bin, und immer mal wieder gerne lerne :P
    Problem bei mir war damals, dass ich bei jedem Start die Dateien auf Veränderung des MD5 überprüft habe, was erstens viel zeit bei langsamen Computern beansprucht und zweitens MD5 immer noch editiert werden kann ohne das es eine Veränderung gibt.
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates

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

    Ich habe eine sehr ähnliche:
    Spoiler anzeigen

    XML-Quellcode

    1. <Files>
    2. <OnlineEntry>
    3. <Type>File</Type>
    4. <Checksum>9614608ec895f5b22e73a1c8b6d41798</Checksum>
    5. <Name>info.xml</Name>
    6. <FileLength>116998</FileLength>
    7. </OnlineEntry>
    8. <OnlineEntry>
    9. <Type>Directory</Type>
    10. <Name>@artofrp</Name>
    11. <Content>
    12. <OnlineEntry>
    13. <Type>File</Type>
    14. <Checksum>c4ca4238a0b923820dcc509a6f75849b</Checksum>
    15. <Name>version.nfo</Name>
    16. <FileLength>1</FileLength>
    17. </OnlineEntry>
    18. <OnlineEntry>
    19. <Type>Directory</Type>
    20. <Name>addons</Name>
    21. <Content>
    22. <OnlineEntry>
    23. <Type>File</Type>
    24. <Checksum>e915265c26a45bae6cfa27305873bf51</Checksum>
    25. <Name>a3l_amc.pbo</Name>
    26. <FileLength>5847346</FileLength>
    27. </OnlineEntry>
    28. <OnlineEntry>
    29. <Type>File</Type>
    30. <Checksum>b3db77b4b8b2fae2944e00032a611f32</Checksum>
    31. <Name>a3l_amc.pbo.artofrp.bisign</Name>
    32. <FileLength>560</FileLength>
    33. </OnlineEntry>
    34. <OnlineEntry>
    35. <Type>File</Type>
    36. <Checksum>3a429bd20383532a26ccb1551a4cc08a</Checksum>
    37. <Name>a3l_animations.pbo</Name>
    38. <FileLength>2773333</FileLength>
    39. </OnlineEntry>
    40. <OnlineEntry>
    41. <Type>File</Type>
    42. <Checksum>2be39a1a883116f005cac8cd3cdb5a0c</Checksum>
    43. <Name>a3l_animations.pbo.artofrp.bisign</Name>
    44. <FileLength>560</FileLength>
    45. </OnlineEntry>
    46. <OnlineEntry>
    47. <Type>File</Type>
    48. <Checksum>9da3db81468a48622a91e85f9d0e6446</Checksum>
    49. <Name>a3l_anims.pbo.artofrp.bisign</Name>
    50. <FileLength>560</FileLength>
    51. </OnlineEntry>
    52. ....


    Ich habe halt die Dateien als Content der Ordner gesetzt, dann konnte ich da schön rekursiv vergleichen (immer mit den bereits vorhandenen Ordnern). Außerdem habe ich noch die Dateiengröße mitgeliefert, dann muss man nicht immer gleich hashen (was sehr viel Zeit in Anspruch nimmt)
    Mfg
    Vincent

    VincentTB schrieb:

    Ich habe halt die Dateien als Content der Ordner gesetzt, dann konnte ich da schön rekursiv vergleichen (immer mit den bereits vorhandenen Ordnern). Außerdem habe ich noch die Dateiengröße mitgeliefert, dann muss man nicht immer gleich hashen (was sehr viel Zeit in Anspruch nimmt)


    Das habe ich z. B. damals nicht bedacht, und es kam wie oben beschrieben zu den langen Startzeiten aufgrund des Hashens, aber an FileLength hab ich jetzt wirklich nicht gedacht. Und du hast dann nur sofern die FileLength nicht stimmte erst die Datei gehasht zum überprüfen oder wie?

    Grüße
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates
    @Sayem
    Jo, obwohl das leider nicht so mega viel Zeit verringert hat, weil die 80 % der Dateien, die gleichgeblieben sind, mussten trotzdem gehasht werden. Aber ich habe schon überlegt, das hashen einfach rauszuwerfen, denn die Wahrscheinlichkeit ist sehr gering, dass eine veränderte Datei exakt die gleiche Dateigröße hat (aber weil die Wahrscheinlichkeit besteht musste ich das hashen drin gelassen... )
    Mfg
    Vincent

    VincentTB schrieb:

    @Sayem
    Jo, obwohl das leider nicht so mega viel Zeit verringert hat, weil die 80 % der Dateien, die gleichgeblieben sind, mussten trotzdem gehasht werden. Aber ich habe schon überlegt, das hashen einfach rauszuwerfen, denn die Wahrscheinlichkeit ist sehr gering, dass eine veränderte Datei exakt die gleiche Dateigröße hat (aber weil die Wahrscheinlichkeit besteht musste ich das hashen drin gelassen... )


    Ich hatte damals ein Java Projekt gesehen, welche es halbwegs vernünftig löste, allerdings wurde auch nur nach einem Download alles gehasht und validiert, und nach jedem start nicht mehr solange wie kein Update mehr kam.
    Sofern wieder ein Update eingeworfen wurde, wurde dann wieder nach dem abgeschlossenem Download validiert.

    Hier z. B. ein Projekt: github.com/threerings/getdown

    Aber ich muss mir auch noch eine Lösung suchen, ganz auf das Hashen möchte ich allerdings nicht verzichten, da mir dann doch irgendwo das zu unsicher ist, wobei die möglichkeit besteht wenn etwas nicht klappen sollte, dass man auf Fehler überprüft und dann alles hasht und somit den Fehler findet.
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates
    An dieser Stelle möchte ich nur in den Raum werfen, dass Integritätsprüfungen anhand von Hashes keine Echtheit von Daten beweisen können.

    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 :!:
    Wie hast du die Echtheit deiner Dateien bei überprüft? Ich hab mich damit in dem sinne noch nie beschäftigt.
    Grüße
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sayem“ ()

    Das geht mit Signaturen, die man mit Schlüsseln und einem Hash der Bytes der jeweiligen Datei bildet. Ich habe SHA512 für die Hashes und RSA 8192 Bit für die Schlüssel verwendet, wobei 4096 Bit eig. völlig ausreichen.

    de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem

    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 :!:
    Zu was genau, zum Aussehen einer entsprechenden Klasse für's Signieren oder was meinst Du? ;)

    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 :!:
    @Trade Jap genau, wie eine entsprechende Klasse ausschauen könnte, und wie du es bspw. anwenden würdest. Ich kann mir das gerade ehrlich gesagt nur schwerlich vorstellen. Vor allem, wenn ich bedenke wie würdest du das bei ca. 3000 Dateien machen?
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates
    Sowas: RsaSignature-Klasse
    Das soll jetzt hier btw keine Eigenwerbung (ist eh erst eine Pre-Alpha, die noch nicht ganz funktioniert) sein, es ist nur einfacher und geht schneller, wenn man das verlinkt,

    Das mit so vielen Dateien zu machen, ist nat. unsinnig, da man abartig viel signieren und Signaturen mitliefern müsste. :P Das macht man natürlich mit einzelnen Archiven (z. B. Zip-Dateien). Dann liest man einfach die Bytes der Datei mit einem BinaryReader aus und ruft SignData mit der aktuellen Instanz der Klasse auf, die dann einen PrivateKey enthält.
    Da das alles auch für den TE interessant ist, kann man das hier ruhig stehen lassen, denke ich.

    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 :!: