/
hubbitus
/
shell.scripts
Обзор
Документация
Войти
/
hubbitus
/
shell.scripts
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
shared-fileshare-services/rapidshare.com.GET.socks
271 строка
12 KB
Pavel Alexeev
Cleanup, sorting, moving. Prepare to publish in github.
15 апр 2014, 15:59
15 апр 2014, 15:59
c190798
Код
Авторство
О чём код?
#!/bin/bash . ~/bin/SHARED/getopt.bash . ~/bin/SHARED/timedread.bash . ~/bin/SHARED/printArray.bash ######SETTINGS######### PROXY_CONNECT_TIMEOUT=${PROXY_CONNECT_TIMEOUT:-10} #Время таймаута, после которого считаем проксю вообще МЕРТВОЙ PROXY_TEST_MAX_TIME=40 #Секунд, сколько всего на тест прокси! WEB_PATH_FOR_IMAGE=/var/www/temp/rapidshare.com/image.gif WEB_URL_FOR_IMAGE=http://x-www.info/rapidshare.com/image.gif WEB_PLAY_URL="http://temp/web_play.php" #Какой URL загружать, чтобы проиграть звук. Так сделано для того чтобы можно было проиграть звук на удаленной машине, а не обязательно на той, на которой сейчас выполняется скрипт!!! #WEB_PLAY_URL=http://x-www.info/web_play.php LOGFILE=log.log CLEAN_TEMP_FILES=1 #Удалять за собой временные файлы или нет PROXY_DIR=${PROXY_DIR:-'./'} ####################### #Перемнные, для возврата значения ReturN0='' ReturN1='' # Вывод команд перед их исполнением. #set -o verbose #Free SOCKS 4 proxy list: #SOCKS4_proxy=68.96.112.225:40233 function CLEAN_TEMP(){ if [ $CLEAN_TEMP_FILES -gt 0 ] ; then rm 1.htm 2.htm form.coded form.decoded 2>/dev/null fi }; #f CLEAN_TEMP #Проверка результата function rapidshare_Proxy_Check_Result(){ #$1 - Error Code #$2 - Загруженный файл! #$3 - ИМЯ вообще желаемого к загрузке файла if [ $1 -eq 0 ] ; then echo Для проверки используем файл $2 #Интересно, код может быть 0, но не загрузится ничего, или загрузится фигня #Потому как прокси уже получил ерунду, а мне отдал без ошибки. #смотрим на зугруженный результат #<input type="submit" name="dl.start" value="Free"> #FORM_ACTION=`fgrep '<form' "$2" | sed -r 's/.*[aA][cC][tT][iI][oO][nN]="([^"]+)".*/\1/g;'` #set -x FORM_ACTION=`grep -P "<form.+$3" "$2" | sed -r 's/.*[aA][cC][tT][iI][oO][nN]="([^"]+)".*/\1/g;'` #set +x #echo FORM_ACTION=$FORM_ACTION #exit 150 if [ ! "$FORM_ACTION" ] ; then return 101; else return 0; #ВСЕ ПУЧКОМ! fi else return $1; fi }; #f rapidshare_Proxy_Check_Result #Пробная загрузка и проверка результата function rapidshare_PROXY_CHECK(){ GET_URL=$1 GET_PROXY=$2 #Настраиваемо RESULT_FILE="${PROXY_DIR}${GET_PROXY/:/_}/result.htm" #CURLTestCmd="$CURLcmd $URL --max-time $PROXY_TEST_MAX_TIME --connect-timeout $PROXY_CONNECT_TIMEOUT -o ${PROXY_DIR}${PROXY}/result.htm" CURLTestCmd="$CURLcmd $GET_URL --max-time $PROXY_TEST_MAX_TIME --connect-timeout $PROXY_CONNECT_TIMEOUT -o $RESULT_FILE" #сначала стандартно используем Проксю if [ "$PROXY_DIR" -a "$GET_PROXY" ] ; then mkdir -p ${PROXY_DIR}${GET_PROXY/:/_} CURLTestCmd="$CURLTestCmd --trace-ascii ${PROXY_DIR}${GET_PROXY/:/_}/proxy.log" fi echo "Пробуем прокси $GET_PROXY в стандартном HTTP-режиме ($CURLTestCmd)": $CURLTestCmd rapidshare_Proxy_Check_Result $? "$RESULT_FILE" "`basename $GET_URL`" errno=$? if [ $errno -eq 0 ] ; then return 0; #Ну и все круто, работает, прокся хорошая, продолжаем else #Тогда теперь попробуем туннелинг #-p/--proxytunnel: if [ "$OPTp" ]; then #Только если это был обычнфй прокс ReturN0=$errno #потом понадобится, как возаращаемое знаечние, записать if [ "$PROXY_DIR" -a "$GET_PROXY" ] ; then CURLTestCmd="$CURLTestCmd --proxytunnel --trace-ascii ${PROXY_DIR}${GET_PROXY/:/_}/tunnel.log" else CURLTestCmd="$CURLTestCmd --proxytunnel" fi echo "Пробуем прокси $PROXY в режиме туннелирования трафика ($CURLTestCmd):" $CURLTestCmd rapidshare_Proxy_Check_Result $? "$RESULT_FILE" "`basename $GET_URL`" return $? #Теперь полюбому этот код возвращаем, что бы в нем теперь не было else return $errno fi fi }; #f rapidshare_PROXY_CHECK function rapidshare_COM_GET(){ GETOPTS_STRING="p:4:5:s:" URL=$1 shift 1 #Первый параметр позиционный, так и есть URL, его отрезаем #echo '$@='$@ #Парсим параметры getopt_parse "$@" if [ $OPT4 ]; then echo '$OPT4="'$OPT4'"'; fi if [ $OPTp ]; then echo '$OPTp="'$OPTp'"'; fi if [ $OPT5 ]; then echo '$OPT5="'$OPT5'"'; fi if [ $OPTs ]; then echo '$OPTs="'$OPTs'"'; fi #Бакапим старую картинку сначала: `dirname $WEB_PATH_FOR_IMAGE`/image_bak.bash $WEB_PATH_FOR_IMAGE 2>/dev/null #CURLcmd="curl --trace-ascii $LOGFILE -v" CURLcmd="curl" PROXY= if [ $OPT4 ]; then CURLcmd="$CURLcmd --socks4 $OPT4 "; PROXY=$OPT4; fi if [ $OPT5 ]; then CURLcmd="$CURLcmd --socks5 $OPT5 "; PROXY=$OPT5; fi if [ $OPTp ]; then CURLcmd="$CURLcmd --proxy $OPTp "; PROXY=$OPTp; fi #Speed if [ $OPTs ]; then CURLcmd="$CURLcmd --limit-rate $OPTs"; fi #echo $CURLcmd #exit CURLcmdWithoutLog=$CURLcmd #БЕЗ лога CURLcmd="$CURLcmd --trace-ascii $LOGFILE " #Добавляем логирование #wget -c --save-cookies cookies.txt --post-data l=462934&p=%2538%2538%2534%2531%2532%2538%2535%2530%2538&dl.start=Download+template_pack_from_plumcake.part01.rar http://rapidshare.de/files/16751090/template_pack_from_plumcake.part01.rar if [ "empty" = "empty$URL" ] then echo 'Необходим аргумент-ссылка!' exit 1 fi ###1 Сначала главную страницу ##Если все нормально, то какраз и вернется нулевой код и 1.htm нужный уже быдет загружен #Глобальную, чтобы 100 раз не проверять FORM_ACTION= rapidshare_PROXY_CHECK "$URL" "$PROXY" errno=$? #Без переменной нельзя, иначе условие тоже операция, и значение переписывается if [ $errno -ne 0 ] ; then CLEAN_TEMP return $errno; fi echo 'ПРОКСИ РАБОТАЕТ похоже!' PROXY_DIR_TMP=`dirname $RESULT_FILE` ###ТУТ УЖЕ ДОЛЖЕН РАБОТАТЬ ПРОКСИ!!!!!!!!! Дальше все как всегда!!! ###2 Выдираем action формы: #FORM_ACTION=`fgrep '<form' 1.htm | sed -r 's/.*[aA][cC][tT][iI][oO][nN]="([^"]+)".*/\1/g;'` #Выше закомментировал, потому как в проверках он уже должен был быть распаршен echo FORM_ACTION=$FORM_ACTION ###2 Грузим $CURLcmd --data "dl.start=Free" $FORM_ACTION -o $PROXY_DIR_TMP/2.htm #1 Странно, видать отказались от подобного кодирования. ну так даже проще. ###3 Выдернем форму #fgrep 'unescape(' 2.htm | sed -r "s/.*(unescape\('.+'\))}}.*/var ttt = \1; print (ttt);/g;" > form.coded ###4 Разкодируем форму #js form.coded > form.decoded ###5 Выдираем ссылку на картинку: #IMG_URL=`cat form.decoded | sed -r 's/.*src="([^"]+)".*/\1/g;'` IMG_URL=`fgrep 'No premium user. Please enter' $PROXY_DIR_TMP/2.htm | sed -r 's/.*src="([^"]+)".*/\1/g;'` echo IMG_URL=$IMG_URL if [ ! $IMG_URL ] #Нету картинки, проверим просят ли нас подождать then WAIT_BAD_MIN=`fgrep '(Or wait ' $PROXY_DIR_TMP/2.htm | sed -r 's/.*?\(Or wait ([0-9]*) minutes?\).*?/\1/'` PROXY_USED=`fgrep 'Your IP-address ' $PROXY_DIR_TMP/2.htm | sed -r 's/.*Your IP-address ([0-9.]+) is already downloading a file.*/\1/'` if [ ! $WAIT_BAD_MIN ] then echo "Your IP-address $PROXY_USED is already downloading a file. You have to wait until it is finished." echo "Прокся $PROXY_USED РАБОЧАЯ, но к сожалению уже используется, занята" return 102 else echo 'You have reached the download-limit for free-users. Want to download more?' echo "Предлагают подождать $WAIT_BAD_MIN минут" return 103 fi fi ###6 Грузим картинку $CURLcmd $IMG_URL -o $WEB_PATH_FOR_IMAGE if [ "$WEB_PLAY_URL" ] ; then #Если настроено, проиграем звук! curl $WEB_PLAY_URL -s -o /dev/null & fi ###7 Запрашиваем пользователя ее прочитать echo "Посмотрите картинку по адресу $WEB_URL_FOR_IMAGE и введите что там написано (автоматически разбор пока не реализован):" timedread IMG_ANS echo Вы ввели - $IMG_ANS, попробуем ### Выдираем таймаут который надо подождать WAIT_TIMEOUT=`fgrep '<script>var' $PROXY_DIR_TMP/2.htm | sed -r "s/.*<script>var c=([0-9]+); var.*/\1/g;"` #echo "ПРИДЕТСЯ ПОДОЖДАТЬ для начала закачки $WAIT_TIMEOUT секунд! (Ждем половину)" #sleep $(( $WAIT_TIMEOUT / 2 )) echo "ПРИДЕТСЯ ПОДОЖДАТЬ для начала закачки $WAIT_TIMEOUT секунд!" ##(( WAIT_TIMEOUT-=ReadSeconds )) #ReadSeconds сколько секунд читали ответ (сколько отвечал пользователь) из ф-ии timedread #Если просрочили, то отрицательного не надо в любом случае (( (WAIT_TIMEOUT-=ReadSeconds) < 0 ? WAIT_TIMEOUT=0 : 0 )) echo "На самом деле, ждать уже осталось $WAIT_TIMEOUT секунд..." sleep $WAIT_TIMEOUT ###8 Снова action выдираем из формы: #FORM_ACTION=`cat form.decoded | sed -r 's/.*[aA][cC][tT][iI][oO][nN]="([^"]+)".*/\1/g;'` FORM_ACTION=`fgrep 'form name="dl" action=' $PROXY_DIR_TMP/2.htm | sed -r 's/.*form name="dl" action="([^"]+)".*/\1/g;'` echo FORM_ACTION=$FORM_ACTION ###8.1 И submit (name="actionstring") #<input type="submit" name="actionstring" value="Download from Level (3) #2-network"></h3> #FORM_SUBMIT=`cat form.decoded | sed -r 's/.*name="actionstring" value="(.+)".*/\1/g;'` #echo FORM_SUBMIT=$FORM_SUBMIT #Можно качать ГЕТом!!! #http://forum.ru-board.com/topic.cgi?forum=5&topic=21567&start=0&limit=1&m=1#1 #http://dl43cg2.rapidshare.com/files/7310884/4458304/kart_fokusy.part1.rar?accesscode=91HS ###9 УХХ, вроде финал, все сабмитим и грузим: #НЕЛЬЗЯ использовать докачку #wget $FORM_ACTION --post-data "accesscode=$IMG_ANS&actionstring=$FORM_SUBMIT" --load-cookies cook.FILE --save-cookie cook.FILE #Загрузка долгая, очищаем сначала #CLEAN_TEMP echo "Грузим следующей коммандой:" echo "$CURLcmdWithoutLog "$FORM_ACTION?accesscode=$IMG_ANS" -o `basename $URL`" $CURLcmdWithoutLog "$FORM_ACTION?accesscode=$IMG_ANS" -o `basename $URL` #Сигнал завершения. Обычно в очереди стоят, а распознавание картинки ручное. if [ "$WEB_PLAY_URL" ] ; then #Если настроено, проиграем звук! curl $WEB_PLAY_URL -s -o /dev/null & fi return 0; }; #rapidshare_COM_GET() #rapidshare_COM_GET "http://rapidshare.com/files/195650/SolidWorks.2007.Multilanguage.SP0.0.part03.rar" 4 "200.21.214.107:1080" #rapidshare_COM_GET "http://rapidshare.com/files/187135/SolidWorks.2007.Multilanguage.SP0.0.part04.rar" ##################################################### if [ "$1" ]; then #Если переданы 3 параметра при вызове скрипта (файла) то автоматически запускаем, считая: #$1 - URL #$2 - Proxy-type #$3 - Proxy rapidshare_COM_GET $1 $2 $2 fi ######################################################