Скачиваем с Rapidshare в консоли и автоматически сбрасываем PPP сессию

Всем привет!

Сегодня я решил выложить свои скрипты для скачивания файлов с Рапиды с помощью wget и с сбросом PPP сессии.

Применение:
Для примера возьмём моего провайдера.
Для выхода в интернет я использую ADSL модем с безлимитным тарифным планом.
При сбросе сессии мне даётся случайный внешний IP адрес.

Идея:
Сделать скачивание с Рапиды через консоль и после каждого скачивания сбрасывать PPP сессию для получения нового IP адреса и не ждать 15 минут.

Оборудование:
Модем у меня StarNet который я успешно перешил в Acorp Lan 120.
Для работы нам потребуется открытый доступ к модему через telnet.
Программа expect, для автоматизации сброса сессии.


Скрипты:

При обрыве соединения ppp0 происходит автоматическое переподключение.
Все скрипты сложить в одну папку.

p1 - Узнаёт PID демона PPPD

Листинг:
Copy Source | Copy HTML

  1. #!/usr/bin/expect -f

  2. log_user 0

  3. spawn telnet 192.168.1.1

  4. expect "BusyBox on router login:" {send "root\r"}

  5. expect "Password:" {send "Admin\r"}

  6. expect "#" {send "ps ax |grep pppd\r"}

  7. log_user 1

  8. send "exit\r"

  9. expect eof



p2 - Убивает PPPD по PID
И модем СРАЗУ автоматически поднимает заново.

Листинг:
Copy Source | Copy HTML

  1. #!/usr/bin/expect -f

  2. set pid [lindex $argv 0]

  3. log_user 0

  4. spawn telnet 192.168.1.1

  5. expect "BusyBox on router login:" {send "root\r"}

  6. expect "Password:" {send "Admin\r"}

  7. expect "#" {send "kill $pid"}

  8. send "exit\r"

  9. expect eof



Поправьте IP модема на свой.

Ещё нам потребуется скрипт DownloadFromRS
Он как раз предназначен для скачивания файлов с Рапиды через консоль, использую wget.

Теперь нам нужно отредактировать скрипт DownloadFromRS
таким образом, что-бы после окончания скачивания он выполнял скрип для сброса PPP сессии.

Листинг модифицированного скрипта:
Copy SourceCopy HTML

  1. #!/bin/bash

  2. ################################################

  3. #Purpose: Automate the downloading of files from rapidshare using the free account

  4. #using simple unix tools.

  5. #Date: 14-7-2008

  6. #Authors: Slith, Tune

  7. #Improvements: Please email them to jwhatson@gmail.com

  8. #Post Feedback and comments to http://emkay.unpointless.com/Blog/?p=63

  9. #Notes: To use curl instead of wget use 'curl -s' and 'curl -s -d'

  10. #Version: 1.2 - Rapidshare has added a wait time in between file downloads. On top of your download

  11. #to start. This has been fixed.

  12. #Added a 'kill time' feature. Specify killTime as an hour of the day and if the time is greater than this.

  13. #the script will end. Useful for using cron to start script at offpeak time and killing it when off speak ends.

  14. ################################################

  15. mirror=dt.rapidshare.com;

  16. ## possible mirrors

  17. # cg.rapidshare.com

  18. # l34.rapidshare.com

  19. # tg.rapidshare.com

  20. # gc2.rapidshare.com

  21. # dt.rapidshare.com

  22. # tl2.rapidshare.com

  23. # l32.rapidshare.com

  24. # l3.rapidshare.com

  25. # gc.rapidshare.com

  26. # l33.rapidshare.com

  27. # tl.rapidshare.com

  28. # cg2.rapidshare.com

  29. killTimeEnable=0

  30. killTime=9

  31. function getOutputFromFreeUserSubmit(){

  32. URL=$(wget -q -O - $line | grep "<form id=\"ff\" action=\"" | grep -o 'http://[^"]*');

  33. output=$(wget -q -O - --post-data "dl.start=Free" "$URL");

  34. }

  35. while read line

  36. do

  37. if [[ $killTimeEnable -eq 1 && $(date +%H) -gt $killTime ]]; then exit; fi;

  38. getOutputFromFreeUserSubmit output; #call getOutputFromFreeUserSubmit, result is stored in $output

  39. posibleWaitTime=$(echo "$output" | grep "try again in about" | grep -o "[0-9]\{1,3\}");

  40. if [ -z "$posibleWaitTime" ]; then #check for zero lenght string

  41. echo "No wait time, likely to be the first file you have downloaded in a while";

  42. else

  43. echo "Waiting $[ $posibleWaitTime+1] minutes (in between file download wait)";

  44. sleep $[ $posibleWaitTime+1]m;

  45. getOutputFromFreeUserSubmit output; #Now we have waited we will try again...

  46. fi

  47. time=$(echo "$output" | grep "var c=[0-9]*;" | grep -o "[0-9]\{1,3\}");

  48. ourfile=$(echo "$output" | grep "document.dlf.action=" | grep -o "http://[^\"]*$mirror[^\\]*");

  49. echo "Waiting $time secs for download of $ourfile";

  50. sleep $time;

  51. wget $ourfile;

  52. ./p1 | grep pppd | grep -v grep | awk '{print $1;}' | xargs ./p2;

  53. sleep 5;

  54. done < input.txt



Осталось сделать файл исполняемым, закинуть нужные ссылки в файл input.txt и запустить скачивание.
Все скрипты должны лежать в одной папке.
Всё очень просто и эффективно.

PS.  Так-же можно сделать обрыв VPN соединения и т.д
Динамический IP - это круто!

Источник:
Статья про скачивание с Рапиды.
blog comments powered by Disqus