klausph
Goto Top

Wget: wie kann man die korrekte übermittlung einer datei überrüfen?

guten tag

mit wget habe ich eine aufgabe:
c:\allegro\wget -Uich-bin-es -nc -Pc:\zdb --no-cache http://wer-auch-immer.de/datei.zzz

nur mal überflüssigerweise(?) face-wink erklärt:
-U gibt dem server bekannt: "ich-bin-es" -> eine art absenderstempel
-nc no clobber: bereits vorhandene dateien werden aktuell überschrieben, sonst bekommen wir mehrere fassungen
-P da soll das zeuchs landen
--no-cache : vergiss irgendwelche cache's: ziehe es aktuelle runter, egal was im cache ist


DAS problem:
wie kann ich erkennen, ob die datei "datei.zzz" komplett mit wget runtergezogen wurde?
ich glaube, es gibt keinen entsprechenden errorlevel.

diese levels sind mir bekannt:
2.12 Exit Status
Wget may return one of several error codes if it encounters problems.

No problems occurred.
1
Generic error code.
2
Parse error—for instance, when parsing command-line options, the ‘.wgetrc’ or ‘.netrc’...
3
File I/O error.
4
Network failure.
5
SSL verification failure.
6
Username/password authentication failure.
7
Protocol errors.
8


frage: wie soll wget erkennen, daß eine datei komplett ist?
sicherlich kann ich im nachhinein mit md5 arbeiten. wer's wissen will: es gibt ein commandozeilentool für win(auch 64bit) für md5 von
"MD5 1.1.24 (c) 2002-14 by Matthias Withopf"....

also nochmal: mein problem ist:
wie kann ich erkennen, daß bei wget.exe eine datei zu 100% sauber rüberkommt?

meine antworten derzeit sind:
1. ich kann erkennen, wenn wget mir KEINE datei liefert:
if not exist datei.zzz echo wget hats nicht gebracht
2a. ich kann -vermutlich- erkennen, wenn mir wget eine 160bytes-große datei liefert
man kann sicherlich abfragen: ist datei.zzz nicht größer als 160bytes echo die datei.zzz hat schrott zum inhalt!
2b. da man weiss, daß die datei eine mindestgröße haben muss, kann man sicherlich die abfrage bei 2a. auch so definieren: ist datei.zzz nicht größer als 1GB echo die datei.zzz ist nicht vollständig!

danke und gruß
vom klaus(i)

Content-ID: 256051

Url: https://administrator.de/contentid/256051

Ausgedruckt am: 14.11.2024 um 17:11 Uhr

SlainteMhath
Lösung SlainteMhath 27.11.2014, aktualisiert am 28.11.2014 um 21:07:00 Uhr
Goto Top
Moin,

daß bei wget.exe eine datei zu 100% sauber rüberkommt?
Einzige Möglichkeit errorlevel == 0 und md5 check ok - bei allem anderen bleiben immer Unsicherheitsfaktoren.

lg,
Slainte
klausph
klausph 27.11.2014 aktualisiert um 13:24:51 Uhr
Goto Top
naja, in die richtung habe ich ja auch schon gedacht.....
aber der erste, der mit wget die datei sich zieht, hat keine md5-info.
die muss er sich danach erarbeiten. und kann die md5 info den anderen zur verfügung stellen.

ich habe das problem ja etwas "abstrahiert":
in "wirklichkeit":
ich entwickele ein verfahren, in der wöchentlich selbstständig zwei dateien runtergezogen werden sollen.
mit wget.
ein/zwei hindernisse sind wohl: der proxy-server und eine eventuelle firewall.
das alles auch noch im ÖD. (=öff.dienst ;-( )
im testlauf gibt es megatonnenweise: wget-abbrüche, besser: dateien, die nicht die 100% größe haben. die nachträglich mit md5 gecheckt werden können, WEIL ich VORHER mit md5 beim 100%-sauberen wget-download die md5-summe ermittelt habe.

wenn das nun selbsständig gemacht werden soll, dann wird es problem geben.
"die" bekommen u.U. NIE einen sauberen download hin....

was mir gerade einfällt:
ich kann den datenliefereranten bitten, eine md5-prüfung in form einer datei zur verfügund zu stellen...
mehr fällt mir nicht ein...

gruß k.l.
SlainteMhath
Lösung SlainteMhath 27.11.2014, aktualisiert am 28.11.2014 um 21:06:50 Uhr
Goto Top
"die" bekommen u.U. NIE einen sauberen download hin....
Weswegen der korrekte MD5 Hash auch vom Server zur Verfügung gestellt werden sollte. Üblich ist da etwa "Dateiname.ext.md5". Die 64byte werden die Clients wohl noch runtergeladen bekommen face-smile
Cthluhu
Lösung Cthluhu 27.11.2014, aktualisiert am 28.11.2014 um 21:06:53 Uhr
Goto Top
Hi
Zitat von @klausph:
was mir gerade einfällt:
ich kann den datenliefereranten bitten, eine md5-prüfung in form einer datei zur verfügund zu stellen...
mehr fällt mir nicht ein...

Das wäre auch der übliche weg. Der Erzeuger der Datei legt zu datei.zzz noch eine datei.zzz.md5 oder datei.zzz.sha mit dem von ihm lokal auf seinem Rechner erzeugten Hash ab.
Damit wird inherent nicht nur dein Herunterladen überprüft sondern auch das Hochladen des Erzeugers der Datei.

Mit freundlichen Grüßen

Cthluhu
klausph
klausph 28.11.2014 aktualisiert um 21:06:40 Uhr
Goto Top
hallo ihr beiden
ein großes dankeschön!
genau das war der gedanke: da muss md5 mit rein!


so hat's geklappt:
habe nun alle dateien mit md5-werte-dateien versehen, diese liegen auf dem server.
beim downloaden der datendateien werden zusätzlich die dazugehörigen md5-dateien mitgezogen.
wenn sie dann auf dem rechner drauf sind, wird der download gecheckt. dazu wird die ebenfalls downgeloadete datei genommen. entspricht bei md5sum.exe die datei nicht dem inhalt von der md5-datei, wird die downgeloadete datei gelöscht (wichtig!)(sie ist ja schrott!).
und der ganze vorgang wird sol lange wiederholt, bis md5sum sagt: alles ok. dann geht das skript weiter!
prima. ganz prima!


mal so geplaudert: hier geht es um richtig fette dateien!
nebenbei NICHT im zip o.ä.format. bringt nix, weil inhalt VOLL und ziemliche fast jede binäre schweinerei ist mit drin face-wink
allerdings: extraeinpacken wäre vielleicht DOCH gut, weil dann kann man ja mit 7z/zip/und co das auspackergebnis schon mal testen!
allerdings2: ich will ja den auftraggeber auf den originaldateianbieter bringen, und dann ist schluss mit lustitsch! der originalanbieter wird es NIE als 7z/zip und co verpacken...

wenn die jahresproduktion runtergezogen wird, dann kommen da schon mal 13 GB zusammen!
mein auftraggeber wurde so langsam nervös, er hatte per hand den download gestern 6x anstubbsen müssen! hat mir nicht geglaubt, daß sein download/intranet mehr oder weniger schrott erzeugt. der örtliche admin ist ein schleimbeutel, sowas von eingebildet von seinem netz. tja, das bin ich auch! face-wink .... jedem seine bildung!
mit dem md5-stempel kann ich es nun prima beweisen. ich wurde auch nervös, weil bei mir lief alles auf x-testrechnern primstens!
gut, wieder eine kuh vom eis!

grüße aus dem osten,
euer klau(si)
Cthluhu
Cthluhu 29.11.2014 um 10:02:47 Uhr
Goto Top
Hi
Zitat von @klausph:
so hat's geklappt:
habe nun alle dateien mit md5-werte-dateien versehen, diese liegen auf dem server.
beim downloaden der datendateien werden zusätzlich die dazugehörigen md5-dateien mitgezogen.
wenn sie dann auf dem rechner drauf sind, wird der download gecheckt. dazu wird die ebenfalls downgeloadete datei genommen.
entspricht bei md5sum.exe die datei nicht dem inhalt von der md5-datei, wird die downgeloadete datei gelöscht (wichtig!)(sie
ist ja schrott!).
und der ganze vorgang wird sol lange wiederholt, bis md5sum sagt: alles ok. dann geht das skript weiter!
prima. ganz prima!

Wenn die Dateien nicht übereinstimmen, würde ich an deiner Stelle auch die MD5 Datei löschen. Auch wenn die Wahrscheinlichkeit einer Fehlübertragung deutlich kleiner ist, kann auch die MD5 Datei falsch sein. Also lieber beides löschen. Der overhead des mehrmaligen Downloads der MD5 Datei sollte vernachlässigbar sein.

wenn die jahresproduktion runtergezogen wird, dann kommen da schon mal 13 GB zusammen!
mein auftraggeber wurde so langsam nervös, er hatte per hand den download gestern 6x anstubbsen müssen!
Naja, ob bei 13 GB große Dateien wget noch das beste Tool ist, wage ich zu bezweifeln. An deiner Stelle würde ich was nehmen, was inkrementell runterlädt und keine Probleme beim Verbindungsabbruch macht und selbständig checksummen prüft.. Z.B. rsync (einfach, hat aber manchmal Probleme mit großen Binärdateien) oder etwas torrentbasiertes.

mfg

Cthluhu
klausph
klausph 29.11.2014, aktualisiert am 30.11.2014 um 11:28:37 Uhr
Goto Top
guten morgen Cthlulu
nur kurz;
1, ja, die md5-files werden auch gelöscht.
erstens entdeckt, wie man befehle koppeln kann, und wie man den errorlevel überhaut abfragt. ich hatte immer konstruktionen wie:
if errorlevel 2 ...
if errorlevel 1 ...
if errorlevel 0 ...
aber die errolevel sind ja NICHT bekannt. man weiss nur, daß 0 100% ok ist.

deshalb bin ich ja megastolz auf diese zeile: face-wink
if %errorlevel% NEQ 0 del z:\zyx\%year%%week%.mrc && del z:\zyx\%year%%week%.mrc.md5


2. so. thema wget ...
a. tja. wenn ich mich nicht irre, ist doch wget in der lage auf abbrüche zu reagieren und aussetzer auszubügeln....
mal schauen (-> doku). ich sehe da timeouts, retries usw usw.


b. ich mag mich auch deshalb nicht von wget verabschieden, weil ich sehr gut damit proxies und entsprechende passwörter berücksichtigen kann. bisher komme ich durch alles durch. [du ahnst gar nicht, was für ein SCHWEINKRAM dir beim öffentlichen dienst begegnen kann, diese typen denken sich auch wirklich alles aus, um DIR das leben schwer zu machen. ;-(((( ]


c. und rsync? muß der "ansprechpartner"(=server) nicht auch auf rsync eingestellt sein?
da war doch was.... und deshalb werde ich den teufel tun!
==>es ist noch NIE jemanden gelungen, auf meine server einzubrechen! erfolgreich NIE! angriffswellen von 10.000 einbruchsversuchen: ja.
stilllegen meiner server: ja (na und?) die rappeln sich von alleine auf, und gut ist. und das seit 12 jahren. das läuft alles ziemlich perfekt.

offtopick: öffnest DU nur eine TÜR, und lässt es zu, daß jemand z.b. die russische c99-shell dir rauflädt, ist es aus! obwohl DU fast keine rechte hast. habe ich selber mal ausprobiert. sie ist beängstigend! hut ab [trotzdem]!
deshalb z.b. kein rsync. keine zugriffe mit "offenem" dialog face-wink
[nein, das gebe ich zu: ich habe keine ahnung von tunnels und anderen gewölben....face-wink]
es muss noch eine alternative zu wget geben.... komme nicht auf den namen.... [nachtrag vom 30.11.2014: curl heisst das tool....]

danke für die plauderei
grüße aus dem osten
vom klaus(i)
kurz vor dem ersten advent.

...
frau'chen hat die adventssachen rausgeholt. die wohnung sieht total anders aus! herr'chen hat den hexenschuss von freitag erfolgreich(?)mit whiskey bekämpft. was gibt es schöneres? ... sichere server!....