Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Tak je to tady. Nefungoval megauploads, chtěl jsem přidělat/opravit pár dalších stahovacích skriptů, nebavilo mě stále kopírovat kód na výběr proxy, zobrazení captcha a čtení kódu. Takže jsem se dokopal a spojil všechny stahovače do jednoho skritpu a společný kód nacpal do funkcí.
Většinu kódu jsem využil (zkopíroval a mírně vyladil) z předchozích skriptů, takže pokud chce někdo popis, tak ať se podívá do těch předchozích. Takže zmínim jen to nejdůležitější.
Mám tam funkci na stažení captcha obrázku a přečtení kódu. K zobrazení se používá gqview, k přečtení kódu se použije buď Xdialog (X) nebo read (konzole). Použití X je podmíněné proměnnou DISPLAY, konzoli jde vynutit použitím přepínače.
Dál jsem přidal funkci delaytime
. Někdy se totiž zobrazí
odpočítávání zároveň s captcha obrázkem, takže je možné začít odpočítávat už
během zobrazení captcha a čtení kódu z klávesnice. Pokud tohle stahovací
systém umožňuje, zjistí se aktuální čas před čtením captcha a po načtení kódu
od uživatele se odpočítává už jenom doba, která zbývá z původní doby
čekání.
Místo opakovaného psaní wget
příkazu jsem definoval funkci, je
to tak taky jednodušší. Díky tomu používají všechny stahovače cookies.
Pro každý stahovač je definovaná vlastní funkce, která se pak volá podle rozpoznané URL.
Pro každé stahování se nastavuje http_proxy
. V souboru je
seznam všech možných proxy serverů, lze vytvořit nový seznam zadáním indexů
původního seznamu, nebo z původního seznamu některé proxy odstranit, případně
lze nastavit vlastní jinou proxy.
Pozor u stahovače netload.in. Tohle je trošku zvláštní stahovač. Někdy zobrazí pouze nějakou dobu k čekání a pak rovnou odkaz pro stažení. Jindy ale zobrazí rovnou odkaz, který ale vede na stránku, kde je captcha a beží jiné zpoždění. Nepochopil jsem, jak se server rozhoduje, kdy bude stahování bez captcha a kdy s captcha. Bez captcha je stahování fungující, s captcha zatím nefunguje. Pokud budu mít někdy čas, dostatek odkazů na testování a bude to zrovna zobrazovat captcha, tak to dodělám. Zatím jsem byl vždy v situaci, že jsem to stáhnul bez captcha nebo jsem měl odkaz na jinej server.
Pokud máte připomínky, budu sledovat diskuzi, tak můžete psát.
UPDATE 2009/05/25: Ověřuje se, že soubor se seznam proxy serverů je skutečně soubor nebo link na soubor.
UPDATE 2009/05/28: Pár nových úprav:
TODO
#!/bin/bash ################################################################################ ################################################################################ export LANG="C" function exitcode() { trap '' 1 2 3 6 9 15 if [ $# -gt 0 ];then local ec="$1" ; else local ec=0 ; fi rm -rf "$tmpdir" trap - 1 2 3 6 9 15 exit $ec } function readcaptcha() { if [ $# -eq 0 ];then code="-";return;fi local img="$1" shift if [ $# -gt 0 ];then local codetitle="\\n($2)" ; fi if [ -n "$img" ];then wgetcmd -nv -O "$captmp" "$img" echo "+++ CAPTCHA local: $captmp [ $( file --mime-type -b "$captmp" ) ]" case "$showcaptcha" in "x" ) if [ -n "$DISPLAY" ];then if [ -n "$gqview" ];then gqview "$captmp" >/dev/null 2>&1 & local pid="$!" elif [ -n "$cacaview" ];then echo "+++ gqview not found, but cacaview found - using cacaview to show captcha" else echo "+++ neither gqview nor cacaview found - not showing captcha" fi else if [ -n "$cacaview" ];then echo "+++ XDISPLAY not found, using cacaview to show captcha" DISPLAY="" cacaview "$captmp" else echo "+++ cacaview not found - not showing captcha" fi fi ;; "c" ) if [ -n "$cacaview" ];then DISPLAY="" cacaview "$captmp" ; else echo "+++ cacaview not found - not showing captcha" ; fi ;; "0" ) echo "+++ not showing captcha as requested" ;; esac code="" while [ -z "$code" ];do if [ -n "$DISPLAY" ] && [ $console -eq 0 ];then code="$( Xdialog --no-cancel --title "$captmp" --screen-center --stdout --inputbox "Enter the CAPTCHA code${codetitle}" 14 40 )" if [ $? -eq 1 ];then code="-";fi else read -p "Code ($codetitle) ['-' for stop]: " code fi done if [ "$showcaptcha" = "x" ] && [ -n "$DISPLAY" ];then kill "$pid" ; fi rm -f "$captmp" else code="*" fi } function delaytime() { if [ $# -eq 0 ];then return 0 ; fi local delay="$1" shift if [ $# -gt 0 ];then local delaystart="$1" else local delaystart="$( date +"%s" )" fi if [ -n "$delay" ]; then realdelay="$(( $( date +"%s" ) - ( $delaystart + $delay ) ))" if [ $( date +"%s" ) -le $(( $delaystart + $delay )) ] ; then while [ $( date +"%s" ) -le $(( $delaystart + $delay )) ];do echo -en "+++ delaying $delay seconds [ $(( $delaystart + $delay - $( date +"%s" ) )) ] \r" sleep 1 done echo fi fi } function wgetcmd() { LANG="C" wget $rate -U "$agent" --save-cookies "$cookies" --keep-session-cookies --load-cookies "$cookies" "$@" } ################################################################################ function downrapid() { local id="rapidshare.com" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" local url1="$( echo "$output1" | perl -e ' undef $/;$a=<STDIN>;print sprintf("%s",$url) if ((($tag)=($a=~m,(<form\s+[^>]*id="ff"[^>]*>),is)) and (($url)=($tag=~m,action="([^"]+)",is))); ')" echo "*** $id URL1: $url1" local output2="$( wgetcmd -nv -O - --post-data="dl.start=Free" "$url1" )" local data="$( echo "$output2" | perl -e ' undef $/; $a=<STDIN>; ($delay)=($a=~m,var\s+c\s*=\s*(\d+)\s*;,is); ($wait)=($a=~m,(?:wait|try\s+again\s+in\s+(?:about)?)\s+(\d+\s+minutes?),is); (($img)=($a=~m,<img\s+src="([^"]+/access[^"]+)",is)) and ($img=~s/\x27\s*\+\s*\x27//g); ($codetitle)=($a=~m,(security\s+question[^\x27]+)\x27,is); ($file)=($a=~m,<form\s+name="dlf?"\s+action="[^"]+/([^"/]+)",is); print "$delay\n$wait\n$img\n$codetitle\n$file\n"; ' )" local delay="$( echo "$data" | sed -n -e '1p;' )" local wait="$( echo "$data" | sed -n -e '2p;' )" local img="$( echo "$data" | sed -n -e '3p;' )" local codetitle="$( echo "$data" | sed -n -e '4p;' )" local file="$( echo "$data" | sed -n -e '5p;' )" if [ -e "$file" ] ; then file="$file.$( date +"%Y%m%d-%H%M%S" ).$$" ; fi local url3 if echo "$codetitle" | grep -qE 'Have[[:space:]]+Fun';then local happyhour=1;else local happyhour=0;fi local url2="$( echo "$output2" \ | perl -e ' undef $/; $a=<STDIN>; while (($u)=($a=~m,document\.dlf\.action=\\\x27([^\x27]+)\\\x27;,is)) { $a=~s,document\.dlf\.action=\\\x27([^\x27]+)\\\x27;,,is; print "$u\n" unless $u=~m,http://rs\d+tl\d*\.,i; }; ' )" echo "*** $id URL2: $url2" echo "*** $id DELAY: $delay" echo "*** $id WAIT: $wait" echo "*** $id CAPTCHA: $img" echo "*** $id CODETITLE: $codetitle" echo "*** $id HAPPYHOUR: $happyhour" echo "*** $id FILE: $file" if [ -n "$file" ] && [ -n "$url2" ];then if [ $happyhour -eq 0 ];then local delaystart="$( date +"%s" )" readcaptcha "$img" "$codetitle" if [ "$code" = "-" ];then return 3 else delaytime "$delay" "$delaystart" fi fi echo "$url2" | while read url3;do if [ "$code" = "*" ] || [ $happyhour -eq 1 ];then codetxt="" else codetxt="&accesscode=$code" fi actionstring="actionstring=1" if wgetcmd -c -O "$file" --post-data="${actionstring}${codetxt}" "$url3"; then break;fi done if [ -e "$file" ] && [ $( stat -c '%s' "$file" ) -gt 1000 ];then return 0;fi elif [ -n "$wait" ];then echo "--- $id Wait $wait" return 2 else echo "--- $id Unable to download" return 3 fi } ############################## function downsuborysk() { local id="subory.sk" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -O - -q "$url" )" local data="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; ($delay)=($a=~m,^\bcislo\s*=\s*(\d+)\s*;,im); (($form)=($a=~m,(<form\s+[^>]*name=captchaform[^>]*>.*?</form>),is)) and ((($img)=($form=~m,<img\s+[^>]*src="(/captcha3/captcha\.php\?id=[^"]+)"[^>]*>,is)) or 1) and (($url)=($form=~m,<form\s+[^>]*action="([^"]+)",is)); print "$delay\n$img\n$url\n"; ' )" echo "*** $id DATA: $data" local baseurl="${url%/download/*}" local delay="$( echo "$data" | sed -n -e '1p;' )" local captchaimgpath="$( echo "$data" | sed -n -e '2p;' )" local path="$( echo "$data" | sed -n -e '3p;' )" captchaimg="$baseurl$captchaimgpath" local url1="$baseurl$path" echo "*** $id URL1: $url1" echo "*** $id CAPTCHA: $captchaimg" echo "*** $id DELAY: $delay" if [ -n "$path" ] && [ -n "$captchaimgpath" ];then local delaystart="$( date +"%s" )" readcaptcha "$captchaimg" if [ "$code" = "-" ];then return 3 else delaytime "$delay" "$delaystart" postdata="submitted=1&str=$code" wgetcmd -c --post-data="$postdata" --referer="$url" "$url1" fi else echo "--- $id Unable to download" return 3 fi } ############################## function downuloziskosk() { local id="ulozisko.sk" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wget -O - -q --keep-session-cookies --save-cookies="$tmpdir/cookies" "$url" )" local data="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; ($form)=($a=~m,(<form\s+[^>]*name\s*=\s*"formular"[^>]*>.*?</form>),is); ($delay)=($form=~m,function\s+set\s*\(\s*\)\s*\{\s*cas_\d+\s*=\s*(\d+)\s*;\s*\},is); ($img)=($form=~m,<img\s+[^>]*src="(/obrazky/obrazky\.php\?[^"]+)"[^>]*>,is); ($url)=($form=~m,<form\s+[^>]*action\s*=\s*"([^"]+)",is); while (($hidden)=($form=~m,(<input\s+[^>]*type\s*=\s*"hidden"[^>]*>),is)) { $form=~s,(<input\s+[^>]*type\s*=\s*"hidden"[^>]*>),,is; ($name)=($hidden=~m,name\s*=\s*"([^"]+)",is); ($val)=($hidden=~m,value\s*=\s*"([^"]+)",is); $file=$val if ($name eq "name"); $val=unpack("H*",$val); $val=~s/(..)/%$1/g; push @hidden,sprintf("%s=%s",$name,$val); } print sprintf("%s\n%s\n%s\n%s\n%s",$delay,$img,$url,join("&",@hidden),$file); ' )" local baseurl="http://www.ulozisko.sk" local delay="$( echo "$data" | sed -n -e '1p;' )" local captchaimgpath="$( echo "$data" | sed -n -e '2p;' )" local captchaimg="$baseurl$captchaimgpath" local url1path="$( echo "$data" | sed -n -e '3p;' )" local url1="$baseurl$url1path" local postdata="$( echo "$data" | sed -n -e '4p;' )" local filename="$( echo "$data" | sed -n -e '5p;' )" echo "*** $id URL1: $url1" echo "*** $id CAPTCHA: $captchaimg" echo "*** $id DELAY: $delay" echo "*** $id FILE: $filename" if [ -n "$url1path" ] && [ -n "$captchaimgpath" ];then local delaystart="$( date +"%s" )" readcaptcha "$captchaimg" if [ "$code" = "-" ];then return 3 else delaytime "$delay" "$delaystart" postdata="$postdata&antispam=$code" wgetcmd -c --post-data="$postdata" --referer="$url" "$url1" fi else echo "--- $id Unable to download" return 3 fi } ############################## function downmegaupload() { local id="megaupload.com" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" local data="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; ($captcha)=($a=~m#<img\s+[^>]*src=["\x27]([^"\x27]+/gencap\.php[^"\x27]+)["\x27]#i); @fields=(); while (($t1)=($a=~m/(<input\s+[^>]*type=["\x27]hidden["\x27][^>]*>)/i)) { if ((($field)=($a=~m/name=["\x27](captchacode|megavar)["\x27]/i)) and (($val)=($a=~m/value=["\x27]([^"\x27]*)["\x27]/i))) { $val=~s/(.)/"%".unpack("H2",$1)/ge; push @fields,sprintf("%s=%s",$field,$val); } $a=~s/<input\s+[^>]*type=["\x27]hidden["\x27][^>]*>//i } print "$captcha\n"; print join("&",@fields)."\n"; ' )" local url1="$url" local captchaimg="$( echo "$data" | sed -n -e '1p;' )" local postdata="$( echo "$data" | sed -n -e '2p;' )" echo "*** $id URL: $url1" echo "*** $id CAPTCHA: $captchaimg" if [ -n "$captchaimg" ] && [ -n "$url1" ];then readcaptcha "$captchaimg" if [ "$code" = "-" ];then return 3 else local output2="$( wgetcmd --post-data="$postdata&captcha=$code" --referer="$url" -O - -nv "$url1" )" local data="$( echo "$output2" | perl -e ' undef $/; $a=<STDIN>; ($delay)=($a=~/count\s*=\s*(\d+)\s*;/); ($t1)=($a=~m#<div\s+[^>]*id="downloadlink"[^>]*>(.*?)</div>#) and ($url)=($t1=~m#<a\s+[^>]*href=[\x27"]([^\x27"]+)[\x27"]#); print "$delay\n$url\n"; ' )" local delay="$( echo "$data" | sed -n -e '1p;' )" local url2="$( echo "$data" | sed -n -e '2p;' )" echo "*** $id URL2: $url2" echo "*** $id DELAY: $delay" if [ -n "$url2" ];then delaytime "$delay" wgetcmd -c "$url2" else echo "--- $id Unable to download" return 3 fi fi else echo "--- $id Unable to download" return 3 fi } ############################## function downbagruj() { local id="bagruj.cz" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" local data="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; if (($b)=($a=~m,<form\s+[^>]*name="f1"[^>]*>(.+?)</form>,is)) { @inputs=(); while ((($input)=($b=~m,(<input\s+[^>]*type="hidden"[^>]*>),is)) and (($name)=($input=~/name="([^"]+)"/is)) and (($value)=($input=~/value="([^"]*)"/is))) { $value=unpack("H*",$value); $value=~s/(..)/%$1/g; push @inputs,sprintf("%s=%s",$name,$value); $b=~s,(<input\s+[^>]*type="hidden"[^>]*>),,is; } $postdata=join("&",@inputs); $captcha=$t1 if (($t1)=($b=~m,<img\s+[^>]*src="(http://bagruj.cz/captchas/[^.]+.jpg)"[^>]*>,is)); $delay=$t1 if (($t1)=($b=~m,<span\s+[^>]*id="countdown"[^>]*>(\d+)</span[^>]*>,is)); print "$captcha\n$delay\n$postdata\n"; }; ' )" local captchaimg="$( echo "$data" | sed -n -e '1p;' )" local delay="$( echo "$data" | sed -n -e '2p;' )" local postdata="$( echo "$data" | sed -n -e '3p;' )" echo "*** $id CAPTCHA: $captchaimg" echo "*** $id DELAY: $delay" if [ -n "$captchaimg" ] ;then local delaystart="$( date +"%s" )" readcaptcha "$captchaimg" if [ "$code" = "-" ];then return 3 else delaytime "$delay" "$delaystart" local url1="$( wgetcmd -O - -q --post-data="$postdata&code=$code" "$url" | perl -e 'undef $/;$a=<STDIN>;print "$b" if (($b)=($a=~m,<a\s+href="([^"]+)">\1</a>,is));' )" echo "*** $id URL1: $url1" if [ -z "$url1" ]; then return 1 ; fi wgetcmd -c "$url1" fi else echo "--- $id Unable to download" return 3 fi } function downiskladka() { local id="iskladka.cz" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" local url1="$( dirname "$url" )/$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; if ((($url)=($a=~m,<iframe\s+[^>]*src="(iCopy/index.php[^"]+)",is)) and (($path,$param)=($url=~m,^(.*)\?file=(.*)$,i))) { $param=unpack("H*",$param); $param=~s/(..)/%$1/g; print sprintf("%s?file=%s",$path,$param); }; ' )" echo "*** $id URL1: $url1" local output2="$( wgetcmd -O - -q --referer "$url" "$url1" )" local data="$( echo "$output2" | perl -e ' undef $/; $a=<STDIN>; ($file)=($a=~m,var\s+downloadCounterLink\s*=\s*[\x27"]([^\x27"]+)[\x27"]\s*;,is); ($delay)=($a=~m,var\s+downloadCounter\s*=\s*(\d+)\s*;,is); if (($url)=($a=~m,^\s*document\.getelementbyid\("downloadstatus"\)\.innerhtml\s*=\s*"\s*<iframe\s+[^>]*src=\x27(http.*/icopy/downloadbalancer[^\x27]+)\x27,im)) { $url=~s,"\+downloadCounterLink\+",$file,is; } $file=~tr/+/ /; $file=~s/%(..)/chr(hex($1))/ge; print sprintf("%s\n%s\n%s\n",$url,$file,$delay); ' )" local url2="$( echo "$data" | sed -n -e '1p;' )" local file="$( echo "$data" | sed -n -e '2p;' )" local delay="$( echo "$data" | sed -n -e '3p;' )" if [ -e "$file" ] ; then file="$file.$( date +"%Y%m%d-%H%M%S" ).$$" ; fi echo "*** $id URL2: $url2" echo "*** $id FILE: $file" echo "*** $id DELAY: $delay" if [ -n "$url2" ] && [ -n "$file" ];then if [ -n "$delay" ];then delaytime "$delay" ; fi wgetcmd -O "$file" --referer="$url1" "$url2" else echo "--- $id Unable to download" return 3 fi } function downleteckaposta() { local id="leteckaposta.cz" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" local data="$( echo -e "<<$url>>\n$output1" | perl -e ' undef $/; $a=<STDIN>; ($burl)=($a=~m,<<(https?://[^/]+)/.*?>>,i); (($t,$file)=($a=~m,(<a\s+[^>]*class=["\x27]download-link["\x27][^>]*>)([^<]+)</a>,is)) and (($path)=($t=~m,href=["\x27](/file/[^"\x27]+)["\x27],is)); print "$burl\n$path\n$file\n"; ' )" local baseurl="$( echo "$data" | sed -n -e '1p;' )" local urlpath="$( echo "$data" | sed -n -e '2p;' )" local file="$( echo "$data" | sed -n -e '3p;' )" local url1="$baseurl$urlpath" if [ -e "$file" ] ; then file="$file.$( date +"%Y%m%d-%H%M%S" ).$$" ; fi echo "*** $id URL1: $url1" echo "*** $id FILE: $file" if [ -n "$file" ] && [ -n "$urlpath" ];then wgetcmd -O "$file" --referer="$url1" "$url1" else echo "--- $id Unable to download" return 3 fi } function downulozto() { ## http://uloz.to/1617316/Heroes.S03E23.HDTV.XviD-LOL.avi local id="uloz.to" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" | perl -e 'undef $/;$_=<STDIN>;print $1 if m;(<form\s+[^>]*name="dwn".*?</form>);is;' )" local data="$( echo "$output1" | perl -e ' undef $/;$_=<STDIN>; (($f)=(m/(<form\s+[^>]*name="dwn"[^>]*>)/is)) and (($url)=($f=~m/action="([^"]+)"/is)); (($f)=(m;(<img\s+[^>]*id="captcha"[^>]*>);is)) and (($captcha)=($f=~m;src="([^"]+)";is)); (($f)=(m;(<input\s+[^>]*id="captcha_nb"[^>]*>);is)) and (($capctrl)=($f=~m;value="([^"]+)";is)); (($f)=(m;(<input\s+[^>]*id="download_button"[^>]*>);is)) and (($downbut)=($f=~m;value="([^"]+)";is)) and ($downbut=~s/(.)/sprintf("%%%s",unpack("H",$1))/ge or 1); print "$url\n$captcha\n$capctrl\n$downbut\n"; ' )" local file="$( basename "$url" )" if [ -e "$file" ] ; then file="$file.$( date +"%Y%m%d-%H%M%S" ).$$" ; fi local url1="$( echo "$data" | sed -n -e '1p;' )" local captchaimg="$( echo "$data" | sed -n -e '2p;' )" local captchanb="$( echo "$data" | sed -n -e '3p;' )" local downbut="$( echo "$data" | sed -n -e '4p;' )" echo "*** $id URL1: $url1" echo "*** $id CAPTCHA: $captchaimg" echo "*** $id FILE: $file" if [ -n "$captchaimg" ] && [ -n "$file" ];then readcaptcha "$captchaimg" if [ "$code" = "-" ];then return 3 else postdata="captcha_nb=$captchanb&captcha_user=$code&download=$downbut" wgetcmd -O "$file" --post-data="$postdata" --referer "$url" "$url1" if [ "$( file -b --mime-type "$file" )" = "text/html" ] && iconv -c -f utf-8 -t ascii//translit "$file" | grep -qEi 'Prekrocen[[:space:]]+pocet[[:space:]]+FREE[[:space:]]+slotu';then rm "$file" echo "--- $id No free slots" return 1 fi fi else echo "--- $id Unable to download" return 3 fi } function downulozcz() { local id="uloz.cz" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" local url1="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; ($url)=($a=~m,href=["\x27](http://[^/]*uloz\.cz/auth/[a-f0-9]+/file/[^"\x27]+)["\x27],is); print "$url"; ' )" echo "*** $id URL1: $url1" if [ -n "$url1" ];then wgetcmd -c --referer="$url" "$url1" else echo "--- $id Unable to download" return 3 fi } function downfilefactory() { local id="filefactory.com" if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local output1="$( wgetcmd -nv -O - "$url" )" if echo "$output" | grep -Eqi 'no free download slots.*try again later' ;then echo "--- $id No free slots" return 1 fi local baseurl="$( echo "$url" | sed -e 's,\([^/]\+://[^/]\+\)/.*$,\1,' )" local path1="$( echo "$output1" | perl -e 'undef $/;$a=<STDIN>; print "$url" if (($t)=($a=~m,(<a\s+[^>]*class="download"[^>]*>),is)) and (($url)=($t=~m,href="([^"]+)",is));' )" local url1="$baseurl$path1" echo "*** $id URL1: $url1" local output2="$( wgetcmd -nv -O - --referer="$url" "$url1" )" local data1="$( echo "$output2" | perl -e ' undef $/;$a=<STDIN>; (($capid)=($a=~m,(<input\s+[^>]*id="captchaID"[^>]*>),is)) and (($v)=($t=~m,value="([^"]+)",is)); (($capim)=($a=~m,(<img\s+[^>]*class="captchaImage"[^>]*>),is)) and (($v)=($t=~m,src="([^"]+)",is)); print "$capid\n$capim\n"; ' )" local postdata="captchaID=$( echo "$data1" | sed -n -e '1p;' )" local captchaimgpath="$( echo "$data1" | sed -n -e '2p;' )" local captchaimg="$baseurl$captchaimgpath" echo "*** $id CAPTCHA: $captchaimgpath" if [ -n "$captchaimgpath" ];then readcaptcha "$captchaimg" if [ "$code" = "-" ];then return 3 else postdata="$postdata&captchaText=$code" local output3="$( wgetcmd -nv -O - --post-data="$postdata" --referer="$url" "$url1" )" local url2="$( echo "$output3" | perl -e ' undef $/;$a=<STDIN>; (($t)=($a=~m,(<a\s+[^>]*class="download"[^>]*>),is)) and (($url)=($t=~m,href="([^"]+)",is)); print "$url";' )" echo "*** $id URL2: $url2" wgetcmd -c --referer="$url1" "$url2" fi else echo "--- $id Unable to download" return 3 fi return 0 } ################################################################################ ################################################################################ function downnetloadin() { local id="netload.in" ## http://netload.in/dateil4GMY6euLa/heroes.323.hdtv-lol.part4.rar.htm if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local baseurl="$( echo "$url" | sed -e 's,\([^/]\+://[^/]\+\)/.*$,\1,' )" local output1="$( wgetcmd -nv -O - "$url" )" echo "$output1" > output1 local data1="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; (($delay)=($a=~m,var\s+sss\s*=\s*-?\s*(\d+)\s*;,is)); (($curl)=($a=~m,<div\s+[^>]*class="dl_first_link2"[^>]*>\s*<div\s+[^>]*class="Free_dl"[^>]*>\s*<a\s+[^>]*href="([^"]+)"[^>]*>,is)) and ($curl=~s/&/\&/g or 1); (($t)=($a=~m,(<a\s+[^>]*class="download_fast_link"[^>]*>),is)) and (($furl)=($t=~m,href="([^"]+)",is)) and ($furl=~s/&/\&/g or 1); (($fn)=($a=~m,<div\s+[^>]*class="dl_first_filename"[^>]*>\s*([^<]+)<,is)); print "$delay\n$curl\n$fn\n$furl\n"; ' )" local delay="$( echo "$data1" | sed -n -e '1p;' )" local cpath="$( echo "$data1" | sed -n -e '2p;' )" local file="$( echo "$data1" | sed -n -e '3p;' )" local fpath="$( echo "$data1" | sed -n -e '4p;' )" if [ -e "$file" ] ; then file="$file.$( date +"%Y%m%d-%H%M%S" ).$$" ; fi if [ -z "$cpath" ];then local url1="$baseurl/$fpath" else local url1="$baseurl/$cpath" fi echo "*** $id URL1: $url1" echo "*** $id FILE: $file" echo "*** $id DELAY: $delay" if ( [ -n "$cpath" ] || [ -n "$fpath" ] ) && [ -n "$file" ];then if echo "$url1" | grep -qi 'captcha=1' ; then local output2="$( wgetcmd -O - --referer="$url" "$url1" )" echo "$output2" > output2 echo "captcha" else delaytime "$delay" wgetcmd -O "$file" -c --referer="$url" "$url1" if [ "$( file -b --mime-type "$file" )" = "text/html" ] ; then local wait="$( perl -e 'undef $/;$a=<STDIN>;print $wait/1000 if ($wait)=($a=~/(?:We\s+had\s+a\s+reqeust\s+with\s+the\s+IP.*?)?You\s+could\s+download\s+your\s+next\s+file\s+in.*?countdown\((\d+)/is);' < "$file" )" echo "--- $id WAIT: $wait secs" rm -f "$file" return 1 fi fi else echo "--- $id Unable to download" return 3 fi return 0 } function downuploadedto() { local id="uploaded.to" ## http://uploaded.to/file/4z1nkb/heroes.323.hdtv-lol.part1.rar if [ $# -eq 0 ];then return 1;fi local url="$1" echo "*** $id URL: $url" local baseurl="$( echo "$url" | sed -e 's,\([^/]\+://[^/]\+\)/.*$,\1,' )" local output1="$( wgetcmd -nv -O - "$url" )" local data1="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; ($delay)=($a=~m,var\s+secs\s*=\s*?\s*(\d+)\s*;\s*//\s*Wartezeit,is); (($frm)=($a=~m,(<form\s+[^>]*name="download_form"[^>]*>),is)) and (($url)=($frm=~m,action="([^"]+)",is)); (($fn)=($a=~m,<tr>[^<]*<td\s+[^>]*>\s*Filename:[^<]*</td[^>]*>[^<]*<td[^>]*>(.+?)</td[^>]*>[^<]*</tr[^>]*>,is)) and ($fn=~s,<[^>]+>,,gs or 1) and ($fn=~s/^\s+//s or 1) and ($fn=~s/\s+$//s or 1); ($wait)=($a=~m,Your Free-Traffic is exceeded.*Or wait (\d+\s+(?:minute|second|hour)s?),is); print "$delay\n$url\n$fn\n$wait\n"; ' )" local delay="$( echo "$data1" | sed -n -e '1p;' )" local url1="$( echo "$data1" | sed -n -e '2p;' )" local file="$( echo "$data1" | sed -n -e '3p;' )" local wait="$( echo "$data1" | sed -n -e '4p;' )" if [ -e "$file" ] ; then file="$file.$( date +"%Y%m%d-%H%M%S" ).$$" ; fi echo "*** $id URL1: $url1" echo "*** $id DELAY: $delay" echo "*** $id FILE: $file" echo "*** $id WAIT: $wait" if [ -n "$wait" ];then echo "--- $id Wait $wait" return 2 elif [ -n "$url1" ] && [ -n "$file" ];then delaytime "$delay" wgetcmd -O "$file" -c --referer="$url" "$url1" else echo "--- $id Unable to download" return 3 fi return 0 } ################################################################################ ################################################################################ proxiesfile="$HOME/.download-proxies" if ! [ -f "$proxiesfile" ] || ( [ -L "$proxiesfile" ] && ! [ -f "$( readlink -f "$proxiesfile" )" ] );then echo "Please, create file $proxiesfile" exit fi allproxylist="$( awk -F '|' '{print $2;}' "$proxiesfile" | tr '\n' ' ' )" sshtunnels="$( awk -F '|' '$1~/^.+$/{print " " $1,$2;}' "$proxiesfile" )" sshtunservers="$( awk -F '|' '$1~/^.+$/{print $1;}' "$proxiesfile" | tr '\n' ' ' )" agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7" console=0 showcaptcha="x" if [ $# -gt 0 ];then i=$# while [ $i -gt 0 ];do case "$1" in -a) if [ $# -gt 1 ];then id="$[$2+1]" proxylist="$proxylist $( echo "$allproxylist" | tr -s '[[:space:]]' '\n' | sed -n "${id}p" )" i=$[$i-1] shift 2 else echo "add proxy: value please" exit fi ;; -d) if [ $# -gt 1 ];then id="$[$2+1]" if [ -z "$proxylist" ] ;then proxylist="$allproxylist";fi proxylist="$( echo "$proxylist" | tr -s '[[:space:]]' '\n' | sed "${id}d" )" i=$[$i-1] shift 2 else echo "remove proxy: value please" exit fi ;; -r) if [ $# -gt 1 ];then rate="--limit-rate=$2" i=$[$i-1] shift 2 else echo "rate limit: value please" exit fi ;; -p) if [ $# -gt 1 ];then proxylist="$proxylist $2" shift 2 i=$[$i-1] else echo "use proxy: value please" exit fi ;; -c) console=1 shift ;; -x) console=0 shift ;; -S ) showcaptcha="0" shift ;; -C ) showcaptcha="c" shift ;; -X ) showcaptcha="x" shift ;; *) v="$1" shift 1 set -- "$@" "$v" ;; esac i=$[$i-1] done gqview="$( type -t gqview )" cacaview="$( type -t cacaview )" if [ -z "$proxylist" ] ;then proxylist="$allproxylist";fi tmpdir="$( mktemp -d )" trap exitcode 1 2 3 6 9 15 echo "=== TMPDIR: $tmpdir" cookies="$tmpdir"/cookies captmp="$tmpdir"/captcha while [ $# -gt 0 ];do url="$1" shift echo "=== Downloading URL: $url" rm -f "$cookies" touch "$cookies" for proxy in $proxylist ;do if [ "$proxy" = "NONE" ];then unset http_proxy else export http_proxy="$proxy" fi echo "=== HTTP PROXY: $http_proxy" if echo "$url" | grep -qEi 'rapidshare\.com/';then downrapid "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'subory\.sk/';then downsuborysk "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'ulozisko\.sk/';then downuloziskosk "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'megaupload\.com/';then downmegaupload "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'bagruj\.cz/';then downbagruj "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'filefactory\.com/';then downfilefactory "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'iskladka\.cz/';then downiskladka "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'leteckaposta\.cz/';then downleteckaposta "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'uloz\.to/';then downulozto "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'uloz\.cz/';then downulozcz "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'netload\.in/';then downnetloadin "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac elif echo "$url" | grep -qEi 'uploaded\.to/';then downuploadedto "$url" e=$? case "$e" in 0 ) break ;; 3 ) exitcode 3 ;; 5 ) exit ;; esac else echo "Unknown URL $url" break fi done done exitcode else cat <<EndOfInfo ssh tunnels: $sshtunnels proxy list: $( echo "$allproxylist" | tr -s '[[:space:]]' '\n' | nl -v0 -w4 -s' -- ' ) $sshtunservers Usage: $0 [ -a proxynum ] [ -d proxynum ] [ -r rate-limit ] [ -p proxyurl ] [ { -c | -x } ] [ -S | -C | -X ] URL ... -a proxynum add proxy at line proxynum -d proxynum delete proxy at line proxynum in ACTUAL proxy list -r rate-limit limit wget download rate -p proxyurl insert proxy specified by proxyurl -c use console to enter captcha code -x use X dialog to enter captcha code (this is default) -C use console cacaview to show captcha image -X use gqview in X to show captcha image (this is default) -S disable captcha showing (only ask for code) URL URL to download EndOfInfo fi
Tiskni
Sdílej:
Jenom počkej, až ty weby začnou předělávat.. Za chvilku tě to přestane bavit
Oni uz je predelavaji:) Ale samozrejme, zalezi na tom, co na tom webu maji a jak slozity to maji. Dokud to bude jenom jednoduchej JS s nejakou hodnotou na odpocitavani a bude tam hodne veci ke stazeni, tak se to vyplati. Kdyz tam nebude nic, nebo stejny veci pujdou najit i jinde, nebo to bude pomaly a pritom slozitej JS kod na rozlousknuti, tak to samozrejme budu ignorovat.
Zatim nejtezsi byl jeden JS, kde pouzivali nejaky metody na stringy a nejaky vypocty, ale vzdycky to bylo to stejny, jenom se menily hodnoty, takze na to stacil trosku slozitejsi (oproti ostatnim) regexp a pak jednoduchej JS interpret. Ono se jim taky moc nevyplati delat tam nejaky slozity zabezpecovani:) Dokonce rapidshare zrusil captcha.
Takze jen tak me to bavit neprestane:) Jak muzes videt, prvni zapisek ve stahovacich skriptech je uz rok starej, a to jsem ty skripty mel jeste driv, nez jsem je dal do blogu.
awk: read error (Is a directory)
awk: read error (Is a directory)
awk: read error (Is a directory)
|
+----> pokus z rapidshare
Ha, divny, posli mi URL (pres email, nebo sem do dizkuze, pokud to neni nejakej copyright), ktery stahujes. Ted zkousim jeden soubor a jede dobre, overil jsem i zkopirovat skript z blogu a porovnat s originalem a je to naprosto stejny (krome jednoho smazlyho komentare).
Mea culpa - teraz som checkoval ten link browserom a na serveri sa uz nenachadzal - moze to byt ono? Nemalo by zahlasit nieco ako link deleted a tak? :-)
Posli mi do mailu ten link. Me rapid pri neexistujicim odkazu hlasi neco jako host not found, ale mam dojem, ze by to melo takovej link preskocit, kdyz uz neexistuje, ale mozna jsem tam vynechal podminku.
Hej, to neni chyba rapidu. Ten awk pouzivam pro cteni proxyn. Ale na zacatku mam test, jestli ten soubor existuje a kdyz ne, tak vypise chybu, takze by to nemelo takhle selhat. Aha, ty jsi to udelal jako adresar misto souboru?
He, zkousel jsem to udelat jako adresar a awk mi hlasil uplne jinou chybu nez tobe. Divny. Ale ted jsem to upravil, tak by to melo psat normalni chybu.
No, udrzovat ... budu to udrzovat tak, ze kdyz zjistim, ze nejakej link nejde, tak to opravim - pripadne, kdyz nekdo posle, ze neco nejde ... jinak nemam v planu, ze bych to kazdej den kontroloval, jestli se nekde neco nezmenilo. na to fakt neni cas.
Jedine co sere su tie CAPTCHA kody - preco je take tazke napisat nieco na ich citanie (sledovanie zmeny farieb na obrazku, citanie ciar podla odtiena - transformacia do textu)?
no, tezky je to proto, ze mezi ty pismena davaji i ruzny cary na mateni OCR, navic tyhle ruzny cary maji obvykle i stejnou barvu. No a clovek ma hodne dobrej mechanizmus na rozpoznani tvaru, nebo aspon k prirazeni nejakyho tvaru k podobnymu, takze to precist dokaze. Ikdyz teda ja osobne mam obcas dost problem.
Jednou taky rapid daval tusim pod pismenka obrazek kocicky nebo pejska a pak napsal, ze musis opsat jenom ty pismena, pod kteryma je kocicka:) Fakt zabavny, ale aby pocitac mohl tohle sam vyhodnotit, tak uz potrebujes opravdu umelou inteligenci, ktera dokaze pochopit, co je obrazek kocicky a co pejsek. Jinak asi by se dalo pripadne udelat neco jednoduchyho, kde bys pouzival masku kocicky a pejska, to nasel v captcha, pak vzal to pismeno pod tim, nejak odfiltroval ten obrazek a pak z toho dostal znak. Ale staci nepatrny deformace a klasicky OCR si s tim neporadi. Porad je ale jenodussi predhodit ten obrazek cloveku, kterej to zvladne behem par vterin:)
Presne Bylo to docela zajimavy sledovat ten vyvoj. Nejdriv jenom klasicka captcha, pak v tom obrazku pribyla ta zviratka, ale porad se opisoval cely kod. A pak jednou udelali captcha delsi a zadavat se mela jenom pismena s kocickou. Tak jsem asi desetkrat blbe zadal kod, nez me napadlo se podivat na stranku web prohlizecem a zjistil jsem, ze se maji zadavat jenom znaky s kocickama
Za nejakou dobu zrusili zviratka a zmenili font. A pred nejakou dobou zrusili captcha uplne.
Vzhledem k nedávným událostem je to docela odvaha. Věděl si, že obdoba DMCA byla přijata v EU? Jmenuje se to EU Copyright Directive a znění české implementace je třeba dostupné zde. Zatím jsem teda nenašel nic o nástrojích dovolujících či usnadňujích, ale bůh ví co v tom vlastně všechno je a co na nás platí.
Uch , trosku jsi me vydesil. Ale klid. Muj skriptik nedela nic, co by porusovalo zakony - to by pak museli zrusit vsechny web browsery:) Jediny, co ten skriptik dela je:
Stejne jako to dela web browser, akorat v mym pripade se na to pouziva wget a pokud neni pozadovanej kod overeni, tak to umoznuje beh automaticky bez interakce v prohlizeci.
No, §43 nebo §44 pro tento případ asi platit nebudou, ale u §40 už si nejsem tak jistý (snažil jsem se asi půl hodiny přesně vyznačit, kterou část myslím, ale přes ten editor co tady funguje se mi to nepodařilo). U Adobe na to šli podobně.
Stejne jako to dela web browser, akorat v mym pripade se na to pouziva wget a pokud neni pozadovanej kod overeni, tak to umoznuje beh automaticky bez interakce v prohlizeci.
Proto to také zmiňuji.
Uch ,ne, opravdu netusim, jakou cast par.40 bych mohl porusovat. Vsechno, co v tom skriptu pouzivam, je sirene pod GPL (bash, wget, Xdialog, gqview).
Ne, do autorskeho prava opravdu nicim nezasahuju. Jedine, jak by se ten skript dal popsat je "usnadneni ziskavani verejne dostupneho weboveho obsahu". A pokud bys chtel "logicky" namitat, ze prave diky mojemu skriptu je mozny stahovat dila chranena autorskym zakonem, ktery nekdo jiny neopravnene siri, tak potom by ten zalobce musel zacit u vsech prohlizecu, vcetne IE, FF a jeste prede mnou i s wgetem.
Ano, muj skript umoznuje jednodussi stahovani, ale to neni autorskym zakonem omezovane. A ochrana stahovani pomoci captcha neni ochrana autorskeho dila. Bud jsi spatne pochopil ten zakon, nebo jsi nepochopil, jak vlastne ty sdileci servery fungujou.
Aha, ted jsem si precet tu zpravicku o rtmpdump. No, to jsou teda fakt paka:) Nicmene ten muj skript sam o sobe nic nestahuje, pouze pouziva externi utility. Takze pokud by chtel nekdo neco nahodou zakazovat, tak by musel zakazat wget, curl, lynx, links a mozna by se mi podarilo donutit i firefox, aby stranku stahnul a ulozil:) A to asi tezko.
Problem je, ze rtmpdump pouzival opravdu nejakou cizi technologii, pravdepodobne i nejak chranenou. Jestli provadeli reverse-engineering netusim, nicmene bych rekl, ze to bylo podobne jako u pripadu TomTom versus Microsoft ohledne FAT. Adobe to zrejme nahral radsi na DMCA, ikdyz by mozna mohl hrat na reverse-engineering jejich protokolu (a urcite nekde v licenci maji, ze pri pouzivani flashe se nesmi komunikace zkoumat).
Muj skript nic takovyho nedela, proste spusti program, precte a zpracuje data a spusti dalsi program. Pokud by neco takovyho chteli zakazat, tak muzou zrusit kompletne vsechno.
Hej, clovece, myslim, ze budes stastnej:) To je presne to, co to umi. Zadas na radku URL adresy, pokud mas i vic proxy serveru, tak skript vezme prvni URL. Nastavi prvni proxy a zkusi stahnout. Bud se to stahne a jde se na dalsi URL od prvni proxy opet, nebo je tam nejaky cekani X minut (obvykle 10 a vice), pak to vezmu druhou proxy a zase zkusi. Kdyz ted rapid nevyzaduje captcha, tak to samozrejme zadny kod nepozaduje, takze to bezi plne automaticky. Da se tak cucat z rapidu na vzdalenym serveru. A samozrejme to je pro anonymous usera.
skoda, ze Ti tam chyba upnito.sk. obcas by sa hodil. jose
hele, neni problem. Posli mi pres emailovej formular nejakej link, na kterym to budu moct zjistit a otestovat a pripisu to, pokud to nebude nejake extra slozity. Mozna jsem par odkazu na upnito.sk videl, ale zrejme jsme k nim mel jiny alternativy (rapid, megaupload ...), takze jsme nemel potrebu to psat (navic tam mam dva jiny slovensky (ulozisko.sk a subory.sk). Ale posli nejakej link a ja mrknu, jestli by to slo pridat.
1) ma este happyhour zmysel? imho captchu uz rapid zrusil uplne
2) ak nenajde graficky displej nemohol by sa obrazok otvorit v cacaview? ked uz sa inak neda (server bez Xov) tak sa s pomocou +/- a pri troche stastia da CAPTCHA precitat