Portál AbcLinuxu, 1. května 2025 20:43

Užitečné skripty 6: stahujeme z rapidshare

12.4.2007 12:57 | Přečteno: 9443× | Linux

Dnešní skript je trochu výjimečný tím, že když jsem začal psát tuto sérii, tak ještě neexistoval. Hledal jsem něco, čím se dají v linuxovém terminálu stahovat soubory z rapidshare, a to bez účtu na rapidshare. Našel jsem plno úžasných aplikací pro Windows, ale nic pro moje potřeby. Tak jsem si něco napsal sám

Abstrakt

Tento skript umí stahovat soubory ze serverů rapidshare (.de, .com). Využívá pouze základní nástroje a měl by tak fungovat všude (no dobře, na mikrovlnce mi to nefungovalo, na Asus WL500g taky ne, ale stačí oprava na jeden řádek). Umí ověřit základní chybové stavy (soubor už na serveru není, soubor na serveru sice je, ale server ho ještě nedovolí stáhnout). Od takto jednoduchého skriptu se nedá čekat, že by uměl lámat captcha, takže se zeptá uživatele, zbytek dělá sám.

Skript využijete, pokud potřebujete stahovat něco na počítač, ke kterému nemáte momentálně fyzický přístup. Na tomto počítači vůbec nemusí být v provozu grafika, protože si captcha obrázek můžete prohlédnout z jiného počítače. Typické využití asi bude: sedím ve škole/práci a počítač doma sosá.

Základní poznatky

Stahování probíhá tak, že člověk někde získá odkaz, zadá do prohlížeče a dostane se tak na úvodní (první) stránku (kde se vybírá Premium nebo Free). Když klikne na Free, dostane se na druhou stránku, kde je captcha. Po napsání správného kódu se soubor začne stahovat.

Servery jsou proti botům chráněny pomocí captcha. Obrázek se stahuje protokolem https. (může někdo vysvětlit, proč nestačí http?)

Obě varianty rapidshare se trošku liší v uživatelském rozhraní. Na modifikaci .com se server (zrcadlo, mirror), odkud se má stahovat, nastavuje už ve formuláři na úvodní stránce , kdežto na .de se to řeší až na druhé stránce (tam, kde je captcha). V obou modifikacích se dá server (zrcadlo) změnit na druhé stránce.

Modifikace .de nutí uživatele čekat nějakou dobu, než se zobrazí captcha. Je to spojené s ošklivě vypadajícím javascriptem (unescape a změť znaků, z nichž třetina je %). Existují návody, jak toto obejít, ale zdá se, že už nefungují, aspoň na mě vždy vybafla hláška psaná nejspíš německy. Modifikace .com čekací dobu nepoužívá a zobrazí captcha hned.

Smysl pro humor: když si zkopírujete adresu obrázku captcha a později si ho necháte zobrazit v prohlížeči, přečtete na něm "LOL".

Fair Play: když si necháte zobrazit captcha obrázek několikrát po sobě bez načtení celé stránky, bude na obrázku nápis, že jste bot a server se s vámi nebude bavit. Když načtete celou stránku znova, je všechno v pořádku, žádný IP ban se nekoná.

Zdá se, že captcha na rapidshare je case insensitive. Navíc možná umožňuje záměnu nuly a písmene 'O', protože se mi ještě nikdy nestalo, že bych napsal kód špatně, i když v něm bylo něco kulatého.

Samotný skript

Soubor download.sh
  1. #!/bin/sh
  2. #usage: $0 <url>
  3. #tested on rapidshare.de and rapidshare.com
  4. #user settings
  5. url=$1
  6. directory=~/tmp/rs
  7. captchaimage=$directory/captcha.png
  8. tmpfile=$directory/wgettmp
  9. #other settings
  10. wget=/usr/bin/wget
  11. #auxiliary functions
  12. countdown(){
  13. echo Countdown
  14. x=$1
  15. until [ $x -le 0 ]; do
  16. echo -e -n "\\r$x "
  17. x=$(($x - 1))
  18. sleep 1
  19. done
  20. }
  21. #============================================================
  22. #The first page
  23. $wget -O $tmpfile $url
  24. present=`grep "You want to" $tmpfile | wc -l `
  25. if [ $present -ge 0 ]
  26. then
  27. echo "The file is present"
  28. else
  29. echo "The file is not present, exitting"
  30. exit 1 #the file is not available
  31. fi
  32. #============================================================
  33. #The second page (with captcha)
  34. action=`grep "action=" $tmpfile | sed -e 's/.*action="\([^"]*\)".*/\1/'`
  35. uri=`grep 'name="uri"' $tmpfile | sed -e 's/.*name="uri" value="\([^"]*\)".*/\1/'`
  36. if [ x$uri != x ]
  37. then
  38. postData="uri=$uri&dl.start=Free" # rapidshare.de
  39. server="de"
  40. else
  41. postData="dl.start=Free" # rapidshare.com
  42. server="com"
  43. fi
  44. echo Debug information: ----------------
  45. echo Action is $action
  46. echo Post Data are $postData
  47. echo Server is $server
  48. echo -----------------------------------
  49. #The second page is downloaded here
  50. $wget --post-data="$postData" -O $tmpfile $action
  51. echo Second page downloaded ------------
  52. if [ $server = "de" ]
  53. then
  54. #the "hidden" form with needed information)
  55. encoded=`grep unescape $tmpfile| sed "s/.*unescape('\(.*\)'.*/\1/"`
  56. if [ x$encoded = x ]
  57. then
  58. minutes=`grep "Or wait" $tmpfile | sed -e "s/.*Or wait\(.*\)minutes.*/\1/"`
  59. echo Cannot download file yet, wait $minutes minutes
  60. exit 2
  61. fi
  62. wait=`grep "var c =" $tmpfile | sed -e "s/.*var c =\([^;]*\);.*/\1/"`
  63. #some not fully understood hack, it does not work everywhere
  64. #http://www.j-pfennig.de/LinuxImHaus/kde_cgi_tutorial.html
  65. # uencoded=`printf "${encoded//\%/\x}"`
  66. substitued=`echo $encoded | sed 's/%/\\\\x/g'`
  67. uencoded=`printf $substitued`
  68. imagename=`echo $uencoded | sed -e 's/.*<;img src="\([^"]*\)">.*/\1/'`
  69. action=`echo $uencoded | sed -e 's/.*action="\([^"]*\)".*/\1/'`
  70. echo Debug information: ----------------
  71. echo Imagename is $imagename
  72. echo Action is $action
  73. echo Wait $wait
  74. echo -----------------------------------
  75. #rapidshare.de forces you to wait some time and it seem that
  76. #it really checks the time interval
  77. countdown $wait
  78. else #rapidshare.com
  79. action=`grep '<;form name="dl" action="' $tmpfile | sed -e 's/.*<;form name="dl" action="\([^"]*\)".*/\1/'`
  80. if [ x$action = x ]
  81. then
  82. minutes=`grep "Or wait" $tmpfile | sed -e "s/.*Or wait\(.*\)minutes.*/\1/"`
  83. echo Cannot download file yet, wait $minutes minutes
  84. exit 3
  85. fi
  86. imagename=`grep "Please enter" $tmpfile | sed -e 's/.*<;img src="\([^"]*\)".*/\1/'`
  87. fi
  88. echo Debug information: ----------------
  89. echo Imagename is $imagename
  90. echo Action is $action
  91. echo -----------------------------------
  92. #When the download form is displayed
  93. $wget -O $captchaimage "$imagename"
  94. #you will probably want to change the following line
  95. display $captchaimage &
  96. echo -----------------------------------
  97. echo ------ Enter Captcha ------------
  98. echo -----------------------------------
  99. echo -n "Enter captcha from the image: "
  100. read captcha
  101. if [ $server = "de" ]
  102. then
  103. postData="actionstring=Download&captcha=$captcha"
  104. else
  105. postData="actionstring=Download&accesscode=$captcha"
  106. fi
  107. echo Debug information: ----------------
  108. echo Post Data are $postData
  109. echo Action is $action
  110. echo Calling $wget:
  111. echo $wget --directory-prefix $directory --post-data="$postData" $action
  112. echo -----------------------------------
  113. #get the file
  114. $wget --directory-prefix $directory --post-data="$postData" $action
  115. echo Finished
Lehké vysvětlení: Ve skriptu je hodně debugovacích informací, což není nikdy na škodu.

Nejlepší na konec

Skript se dá provozovat i na krabičkách, na kterých beží linux. Mám Asus WL500g s Olegovým firmware. Skript tam funguje, jenom se dvěma vadami, které se musí opravit:

chybí příkaz 'wc', takže řádek 26 se musí upravit. Jako varování uvedu, že následující oprava nefunguje:


HTML tagy totiž spolehlivě zmatou bash.

Program wget (vlastně busybox), který je v Olegově firmware, neumí '--post-data'. Je tedy potřeba použít plnou verzi wget [2]. Stačí rozbalit binárku kamkoliv na disk (binárka má přes 2MB, takže se asi musí dát na externí disk připojený přes USB) a na řádku 10 si nastavte správnou cestu. Nezapomeňte nastavit práva na spuštění.

Odkazy

  1. Podobný skript, který ale vyžaduje Premium účet: http://www.markontech.com/2006/12/22/downloading-content-from-rapidsharecom-using-wget-and-bash/
  2. wget potřebný na Asus WL500g: http://wl500g.info/showthread.php?t=1370&highlight=wget+full

Místa k vylepšení, otázky

  1. Přiznávám, že z programátorského hlediska nemusí být skript úplně skvělý, ale o to ani nešlo. Pokud by se někomu chtělo napsat ho lépe, budu jenom rád
  2. Kdyby se povedlo nějak pěkně lousknout captcha, bylo by to skvělé. Mělo by to pořád fungovat na malých krabičkách.
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

12.4.2007 13:59 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
Uff, je to pěkné, ale proč je skript s dvojitým řádkováním?
12.4.2007 15:10 Tomáš | skóre: 31 | blog: Tomik
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Protoze chci, aby byly na vystupu videt mezery i ve vetsim poctu nez jedna, tak je to cele v PRE. Potom chci mit ocislovane radky, takze jsem to lupnul do OL. A dvojite radkovani je na svete. Bohuzel jsem nenasel navod, jak to udelat lepe.
12.4.2007 14:06 Lu-Tze | skóre: 15 | blog: Lu-Tzeho blog
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
Problém těhle skriptíků je v tom, že mají obvykle krátkou životnost - někde změněj název parametru a celej skript je rázem na nic. A pokud nejsi zrovna jeho autor, tak musíš složitě zjišťovat, kde ta chyba je.

Chtělo by to nějakej přiměřeně umělointeligentní nástroj, kterej by dokázal sám podle toho, jak uživatel kliká, sestrojit ten konečnej automat, kterej popisuje pohyb na tom serveru (to znamená umět určit stav ve kterym sem /např.: stav špatně zadaná captcha/ a odvodit si akce, které mě dostanou do jiných stavů /např.: akce počkej 10 minut a pak následuj odkaz/). A kterej by samozřejmě uměl obejít captchu.
12.4.2007 14:15 Oswald
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
Tady je kdyžtak něco podobného pro edisk
#!/bin/bash

countDown() {
	i=26
	while ((--i >= 0)); do
		echo -n "$i"
		sleep 1
		tput el1
		tput cub 3
	done
}

if [ $# != 1 ]; then
	echo -e "\nUsage:\n\t$0 URL\n"
	exit 1
fi

UA="Opera/9.12 (X11; Linux i686; U; en)"
OUTPUT=~/Desktop/"$(basename $1 | sed -r 's/_[^_]+$//' | sed -r 's/-([^-]+)$/\1/')"
DOWNLOAD="$(echo $1 | sed s/stahni/stahnout/)"

echo -n Getting SID...
SID="$(
	curl -I --user-agent "$UA" "$1" 2>/dev/null | grep -Po '(?<=SID=)[^;]+'
)"
if [ -z "$SID" ]; then
	echo " :("
	exit 1
fi
echo " done: $SID"

countDown


curl --user-agent "$UA" \
     --output "$OUTPUT" \
     --cookie SID="$SID" \
     --referer "$1" \ 
     "$DOWNLOAD"
Luboš Doležel (Doli) avatar 12.4.2007 18:18 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
Stahujeme z RapidShare jinak ;-)
  1. Koupíme si premium account za pár babek
  2. Uložíme linky do links.txt
  3. wget -c -i links.txt --http-user=USERNAME --http-password=PASSWORD
17.9.2007 21:40 Ciba, Vladimir Cibulka
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Ahoj, drobna oprava: wget -c -i links.txt --http-user=USERNAME --http-passwd=PASSWORD
12.4.2007 18:50 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
Neuveritelna nahoda, akurat som si v utorok napisal nieco podobne. Par rozdielov. CAPTCHA sa netaha na rapidshare.com cez https ale iba cez http. Mirror sa tiez vybera az na stranke s CAPTCHA. Pre mna bolo prioritou tahat rychlejsie ako normalne a vyuzit pri tom viac dostupnych IP adries (kolko IP adries mas, tolkokrat si clovekom). Takze moj skript je stavany tak, aby dokazal vyuzivat ssh-tunnely na vzdialene stroje. Namiesto wgetu pouzivam netcat. Mozno by to bolo vhodnejsie rieseni na routre. netcat ma 44kB a tych par hlaviciek si vyrobis rucne.

A pred asi tyzdnom zrusili to kvazi encodovanie zoznamu mirrorov, takze uz sa netreba babrat s uudecode alebo podobne.

Moj skript ked zisti, ze treba cakat, tak si pocka zisteny pocet minut+1 a potom to skusi znova. Budem este musiet dorobit, aby dokazal kruhovou sykorkou rozhadzovat linky na niekolko dostupnych IP adries. Zatial je to v stadiu, ze to treba robit rucne a pustit proces niekolkokrat, kazdy s disjunktnym zoznamom suborov na stiahnutie.
If you hold a Unix shell up to your ear, you can you hear the C.
Marián Kyral avatar 12.4.2007 21:00 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
Nevím co máš za verzi olegova fw, ale v aktuální verzi wc v BusyBoxu je.
[maros@wl-500gp root]$ wc -h
wc: illegal option -- h
BusyBox v1.1.3 (2007.01.01-14:37+0000) multi-call binary

Usage: wc [OPTION]... [FILE]...
A nainstalovat plnohodnotný wget taky není žádný problém:
#ipkg install wget-ssl
Aktuální verze je 1.10.2-3. To je myslím dost nové ;-)
13.4.2007 10:07 Tomáš | skóre: 31 | blog: Tomik
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare

Mam BusyBox v1.1.3 (2006.06.29-17:07+0000), to je trosku starsi. Myslim, ze verze firmwaru ma na konci 7f, v dobe, kdy jsem to instaloval, byla posledni stable.

Tu anabazi s wget tam mam proto, ze to bude fungovat i bez ipkg (staci jedna binarka). Je pravda, ze potom nemas ani screen a nemohl by ses jenom pripojit, pustit stahovani a zase se odpojit. Samozrejme, ze ipkg je mocny nastroj a uz se chystam zprovoznit nahravani z internetovych radii pomoci streamripper (skript mam, jenom vyzkousim, jestli funguje).

31.10.2008 20:44 Eddie
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
A nainstalovat plnohodnotný wget taky není žádný problém:

No pro me to problem docela je. Provedu instalaci ,ale i pres to se mi wget stale odkazuje na ten v busyboxu . Nevite,jak spustit ten WGET-SSL ?
Marián Kyral avatar 1.11.2008 07:24 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Nic jsem nastavovat nemusel. Při instalaci byly odkazy na busybox automaticky odstraněny. Když tak zkus spustit /opt/bin/wget
[maros@wl-500gp root]$ type wget
wget is a tracked alias for /opt/bin/wget
[maros@wl-500gp root]$ ipkg files wget-ssl
Package wget-ssl (1.11.4-1) is installed on /opt/ and has the following files:
/opt/bin/wget
/opt/man/man1/wget.1
/opt/etc/wgetrc

Successfully terminated.
[maros@wl-500gp root]$ wget --version
GNU Wget 1.11.4

Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://www.gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Originally written by Hrvoje Niksic .
Currently maintained by Micah Cowan .
[maros@wl-500gp root]$ 
23.11.2007 12:38 Raiden
Rozbalit Rozbalit vše Re: Užitečné skripty 6: stahujeme z rapidshare
Odpovědět | Sbalit | Link | Blokovat | Admin
http://www.linuxexpres.cz/blog/rapidshare-download-zadny-problem

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.