Diskuze k úloze číslo 8

Toto fórum slouží výhradně k diskuzím o úloze číslo 8. Během hry je zakázáno diskutovat o zadání i řešení této úlohy kdekoliv jinde, než zde. K diskuzi o ostatních úlohách prosíme využijte jim příslušná fóra. Prosíme, nekažte hru ostatním!
Re: Diskuze k úloze číslo 8 izidor.matusov (22. 1. 2012 - 20:34) Sbalit(10)
Podelím sa o moje riešenie. Server podporuje sťahovanie časti súboru na vyžiadanie, vďaka čomu som si mohol stiahnuť vždy len časť súboru a vypísať si uložené súbory a ich veľkosť. Naimplementoval som si veľmi jednoduchú knižnicu pre tar, ktorá si na požiadanie stiahla hlavičky súborov. Kopu času som strávil pri implementovaní skoku na ďalšiu hlavičku. Bohužiaľ, wikipédia dostatočne nezdôrazňuje, že size súboru je v 8-kovej sústave... Link na implementáciu:
http://pastebin.com/prcr8vH4

Následne som sťahoval len zaujímavé a (hlavne) dostatočne malé súbory:
http://pastebin.com/0ww9FD1e

(bola by škoda sa nepodeliť o kód :-)
Re: Diskuze k úloze číslo 8 Tomáš Janoušek (22. 1. 2012 - 20:37) Sbalit(8)
Já jsem akorát vzal httpfs2, opravil v něm chyby v podpoře velkých souborů, přimountoval a pustil tar. Akorát jsem v zápalu boje ztratil zdrojáky, takže to buď budu muset udělat ještě jednou, anebo zůstane httpfs2 neopraveno. :-)
Re: Diskuze k úloze číslo 8 Martin Beranek (22. 1. 2012 - 21:49) Sbalit(1)
Další možnost bylo využít sparse-files (anebo hodně velký disk :-)) a
downloadovací program, co umí navazovat (třeba obyčejný wget).

Při poslání 'tar tvR' na částečně stažený archiv se člověk dozví čísla bloků, kde
ten který soubor začíná (pokud už má v archivu hlavičku) a se znalostí velikosti
bloku 512 už není problém roztáhnout si soubor k začátku dalšího bloku (dd seek
takhle vyrobí sparse file o správné velikosti) a zas chvilku stahovat.

Ani není třeba programovat, ale oprava httpfs je určitě záslužnější. :)

Marble

Re: Diskuze k úloze číslo 8 festr2 (23. 1. 2012 - 3:01) Sbalit(5)
ja jsem taky opravil httpfs2 na velke soubory, ale zjistil jsem, ze tar -tvf soubor stejne cte sekvencne a nepreskakuje soubory, jak jsi to vyresil s httpsfs2? Nakonec jsem to delal vsechno rucne bozhuel.
Re: Diskuze k úloze číslo 8 festr2 (23. 1. 2012 - 3:13) Sbalit(4)
a jeste byl problem v tom, ze podrate server nevraci content-lenght na cemz je httpfs2 zavisle, takze i to se tam muselo dodelat. nicmene tar je hloupy (nebo ja) a neumi seeknout na dalsi hlavicko v priade listovani (nebo je hloupe fuse?)
Re: Diskuze k úloze číslo 8 Martin Beranek (23. 1. 2012 - 7:40) Sbalit(1)
Na request bez Ranges Content-length vrací. Je fakt, že by ji asi měl vracet i
pro Content-Ranges, ale kupodivu si doteď nikdo nestěžoval. Další verze
každopádně vyjde nejdříve po skončení letošního po drátě. :)

Marble

P.S.: v tomhle dělá zajímavý bordel i změna terminologie mezi RFC2068 a RFC2616,
konkrétně RFC2068 nazývá číslo za lomítkem u Content-ranges jako "entity-length"
a RFC2616 zakazuje posílat Content-Length pokud se liší entity-lenght a
transfer-length. Pravda, každé to RFCčko zvlášť je samo se sebou konzistentní,
takže tím netvrdím, že podrátí server odpovídá správně, jen postřeh na okraj ...

Re: Diskuze k úloze číslo 8 Tomáš Janoušek (23. 1. 2012 - 7:58) Sbalit(2)
Parametry -n -b 1. A ten ctonent-length se v httpfs2 používá jen na zjištění celkové velikosti, takže stačí, aby to nezdechalo, když to tam nenajde. Jestli to máš všechno dodělaný, tak to někam submitni, protože já jsem to, jak jsem psal, ztratil. :-)
Re: Diskuze k úloze číslo 8 festr2 (23. 1. 2012 - 9:34) Sbalit(1)
-b 1... proc me tohle kurva nenapadlo? Usetril bych si dnesni krusny rano, moc dobre se mi po 4 hodinach spanku nevstavalo..
Re: Diskuze k úloze číslo 8 Milan Roubal (23. 1. 2012 - 23:21) Sbalit(1)
Muj kus opraveneho httpfs vypada takto:

if (b == NULL) {
fprintf(stderr, "%s: GET-Reply didn't contain Content-Length\n", argv0);
// return -1;
}
// if (atoll(b+16) != size) {
// fprintf(stderr, "%s: GET didn't yield whole piece\n", argv0);
// size = (size_t) atoll(b+16);
// }
//size = 11766681088;
size=16384;
b = strstr(buf,"Content-Range: bytes");
if (b != NULL) {
size=atoll(strstr(b+10,"-")+1) - atoll(b + 21) + 1;
}

Nevite nekdo jak debugovat fuse filesystem? fprintf(stderr ...) se mi nikam nezapisovalo, jedince co fungovalo bylo hledat tyto fprinf ve vypisu strace...
Re: Diskuze k úloze číslo 8 pavian (22. 1. 2012 - 22:07) Sbalit(1)
pekne, ocenuji tu kreativitu. ja tusil, ze to bude rychle, tak jsem skakal
rucne a rucne to pocital, jen podle wiki je kazdy soubor uvozen 501B
hlavicky, coz me nejak nesedelo, tak jsem stahoval o trochu vetsi bloky,
abych neminul zacatek noveho souboru (jiny napad jsem tou dobou k ranu
nemel...)

2012/1/22 izidor.matusov <diskuse@podrate.cz>

> Podelím sa o moje riešenie. Server podporuje sťahovanie časti súboru na
> vyžiadanie, vďaka čomu som si mohol stiahnuť vždy len časť súboru a vypísať
> si uložené súbory a ich veľkosť. Naimplementoval som si veľmi jednoduchú
> knižnicu pre tar, ktorá si na požiadanie stiahla hlavičky súborov. Kopu
> času som strávil pri implementovaní skoku na ďalšiu hlavičku. Bohužiaľ,
> wikipédia dostatočne nezdôrazňuje, že size súboru je v 8-kovej sústave...
> Link na implementáciu:
> http://pastebin.com/prcr8vH4
>
> Následne som sťahoval len zaujímavé a (hlavne) dostatočne malé súbory:
> http://pastebin.com/0ww9FD1e
>
> (bola by škoda sa nepodeliť o kód :-)
Re: Diskuze k úloze číslo 8 zjn (22. 1. 2012 - 23:17) Sbalit(1)
Hehe, ručně pomocí hexeditoru, kalkulačky a curl --range :)
Re: Diskuze k úloze číslo 8 shichman (23. 1. 2012 - 2:45) Sbalit(2)
Na TMOU jsem nikdy nebyl, ale podle nějakých náznaků a vzpomínek na řeči účastníků bych soudil, že audio/tady-nic-neni.mp3 tam hrálo nějakou úlohu. Mýlím se?
Jinak díky za alchymistický článek, to jsem si pošušňal... Potion of Insomnia už díky soutěži ani nepotřebuji (alespoň nemusím zpívat ukolébavky, dokud nevystydne).
Re: Diskuze k úloze číslo 8 Bilbo (23. 1. 2012 - 3:39) Sbalit(1)
To neni z TMOU, to je z jine sifrovacky (tusim Matrix par let nazad)

Princip "tady nic neni" spocival v tom, ze tymy dostali CD kde mela byt sifra. Ale na CD zadna sifra nebyla (ano, na CD opravdu sifra neni :), ta byla schovana na vnitrni strane obalu od CD :)

No a spousta dalsich sifrovacek si z toho pak i par let pote delala prdel :)

Dalsi uloha z Matrixu co take prezila i celkem dost dlouho byly Kamenni Kelti ....
Re: Diskuze k úloze číslo 8 festr2 (23. 1. 2012 - 3:03) Sbalit(2)
jinak kdybyste se podivali na ten url link, byla tam sepecifikace tar headeru vcetne specifikace size, ktera je v oktal. nejlepsi reseni me napadlo vyuzit httpfs, ale tar to stejne cetl sekvencne tar -tvf soubor, takze bych se vysledku nedockal, takze prisel na radu php skript.
Re: Diskuze k úloze číslo 8 vojtech.sadek (23. 1. 2012 - 13:13) Sbalit(1)
ja jsem zacal od konce, a nasel jsem tam obrazek podrate.png, kteryzto se mi darilo mrsit(telnet pohnupoval konce radku, tudiz hlavicku a pak jeste asi dalsich 6 mist v souboru, kde je 0D 0A.
Pak jsem prisel na to, ze wget jen appenduje a nekontroluje obsah, tak jsem udelal obri soubor a nechal jsem wget at to dotahne a tail-em z toho ten konec dostanu. jenze jsem zjistil, ze je to nachlup stejny obrazek jako http://www.podrate.cz/files/logo.png. a obrazek Niela se zirafou taky nic neprozradil:(

nakonec jsem si udelal maly programek, ktery urcit polohu nejblizsi dalsi hlavicky a pak appendoval prislusne velky bloku nul a zavolal na par sekund wget a tak stale dokola...az to doslo zase k Nielovi...
Re: Diskuze k úloze číslo 8 aleshus (23. 1. 2012 - 13:50) Sbalit(3)
Já si napsal prográmek co pomocí knihovny libcurl vždycky stáhnul hlavičku souboru z taru, získal velikost souboru a tak věděl, kde bude další hlavička.. :) Takhle jsem si vypsal všechny soubory, koukl na uloha8/heslo a nic tam nebylo :D až na ten odkaz na dev/null, který jsem stáhnul už normálně curlem z řádky a potom data zase ořezal na čistý png :)

Nicméně ten můj prográmek stejně nedokázal projít ten tar na serveru celý, protože jakmile ten offset narostl moc, tak knihovna začala vracet 416: Bad range specification.. Takže klika, že to nebylo až úplně na konci.. :D
Re: Diskuze k úloze číslo 8 aleshus (23. 1. 2012 - 13:57) Sbalit(2)
aaaha tak já to blbě pochopil :) prošel jsem to celé, jen neukončil cyklus, kdy jsem měl..
Re: Diskuze k úloze číslo 8 aleshus (26. 1. 2012 - 11:40) Sbalit(1)
také se tedy podělím.. http://pastebin.com/ES0w3YKF .. Je to v c++(spíš kvůli pohodlnosti s výpisama), ale neopravil jsem tam tu chybu, o které jsem psal výše.......
Re: Diskuze k úloze číslo 8 Martin Jirman (23. 1. 2012 - 18:16) Sbalit(2)
V pythonu mi stačilo "import tarfile", napsat pár řádků a zkopírovat kód odsud:
http://stackoverflow.com/questions/7829311/is-there-a-library-for-retrieving-a-file-from-a-remote-zip/7852229#7852229

Kód z té stránky zapouzdřuje čtení pomocí http do třídy, která má interface souboru (podporuje read a seek). Takový "soubor" pak stačí předhodit standardní třídě tarfile.TarFile.
Re: Diskuze k úloze číslo 8 jakub (24. 1. 2012 - 8:44) Sbalit(1)
A já jsem v Pythonu použil curl a parsovat to ručně :D Přišlo mi to rychlejší a jistější
Re: Diskuze k úloze číslo 8 vojtech.sadek (25. 1. 2012 - 12:52) Sbalit(2)
$ ./stegdetect niel.jpg
niel.jpg : jphide(***)

no, a ja jsem stravil den tim, ze jsem zkousel lousknout niela.
Re: Diskuze k úloze číslo 8 vojtech.sadek (26. 1. 2012 - 8:02) Sbalit(1)
fakt tam nic nebylo?
Re: Diskuze k úloze číslo 8 gimli2 (25. 1. 2012 - 15:36) Sbalit(1)
Muj skriptik zde (pozor, PHP cunarna ;-)):
http://pastebin.com/cK5qfCKb