Testując różne programy pod względem działania z kontami Premium na serwerach plików pod systemem operacyjnym Tomato nie znalazłem żadnego, który spełniałby w stopniu zadowalającym moje potrzeby oczywiście cały proceder dotyczy legalnych działań nie łamiących prawa autorskie itd...
Rsget ma zaimplementowane tylko 3 serwisy i działa wybiórczo przynajmniej z kontem filsonic.
Pyload często się wykrzacza na kontach filesonic zaznaczając pobrany link jako ukończony nie ścigając ani bajta.
Niezadowolony tą sytuacją sięgnąłem do źródła i przyjmując jako wzorzec - najlepszym rozwiązaniem są najprostsze sposoby - moim celem stało się zbadanie jak sobie radzi z tym wget i ku mojemu zaskoczeniu okazało się, że całkiem dobrze jedynym mankamentem jest to, że jest dosyć ograniczony w swojej funkcjonalności jeśli chodzi o zarządzanie całym procesem zaznaczam, że nie jest to demon prędkości.
Wykorzystując funkcje samego programu możemy podać mu listę linków, które jeden po drugim będzie ścigał.
Jednak to za mało jak dla mnie, a mianowicie brakowało mi:
- możliwości odpalenia dowolnej liczby plików jednocześnie
- możliwości reagowania w momencie zerwania połączenia z ISP
- możliwości ponownego pobrania wadliwych linków, które z przyczyn serwisu nie mogły zostać przerwane - przeciążenie serwera, czasowa niedostępność
- możliwość nadawania prędkości ściągania poszczególnym procesom wget'a
- możliwość przedstawienia zaawansowania procesu ściągania
- możliwość wrzucenia wszystkich linków do jednego pliku
- możliwość odpalenia automatycznego po restarcie prądowym (zanik zasilania) urządzeń
- możliwość przypisania odpowiednich prędkości obciążenia łącza w zależności od taryf
- możliwość wznawiania częściowo pobranego pliku
Chce zaznaczyć, że nie jestem programista i wynik mojej miesięcznej batalii z manualami i skryptologią bash'a może być dla profesjonalistów dosyć śmieszny, nieskładny, łamiący zasady programowania, nie mniej jednak działanie skryptu w pełni mnie zadowala i działa dosyć sprawnie, dlatego postanowiłem się podzielić.
Przygotowanie pliku z linkami:
Musimy pamiętać o najważniejszym by dodać link do listy najpierw musimy sprawdzić czy istnieje plik wskazywany przez ten link na serwerze
- sprawdzić ulubionym edytorem tekstu z pod Tomat (nano, vi) czy plik nie zawiera typowych dla Windows zakończeń linii ^M jeśli był tworzony pod WIN
- kursor na końcu listy musi znaleźć się w pustej linii, a nie pozostać na końcu ostatniego linku
#!/opt/bin/bash
LINK='/nas/link' # plik z linkami do pobrania
PLIKI_LOGU='/nas/Logi' # katalog zapisu logów
ZAPIS='/nas/Tmp' # katalog roboczy
LOGIN_HOTFILE='xxxxxx' # login do konta hotfile
HASLO_HOTFILE='xxxxxx' # haslo do konta hotfile
LOGIN_FILESONIC='xxxxxx' # login do konta filesonic
HASLO_FILESONIC='xxxxxx' # haslo do konta filesonic
LOGIN_WUPLOAD='xxxxxx' # login do konta wupload
HASLO_WUPLOAD='xxxxxx' # hasło do konta wupload
LOGIN_UPLOADED='xxxxxx' # hasło do konta uploaded.to
HASLO_UPLOADED='xxxxxx' # hasło do konta uploaded.to
# DODATKOWE KATALOGI/PLIKI
# /nas/link.tmp2 - tymczasowy plik link.tmp2 wykorzystywany w skrypcie zmiany nazw - nadpisywany
# /nas/link.tmp - tymczasowy plik link.tmp - nadpisywany
# /opt/bin/wget - miejsce programu wget
# Wywołanie skryptu ./nazwa_skryptu.sh {ilosc jednoczesnie pobieranych plikow > 0} {predkosc pobierania jednego pliku w kb/s > 0 } {ilosc powturzen zle pobranych linkow > 0}
# ./nazwa_skryptu 3 1000 10
nazwa_logu () {
NAZWA_LOGU=`echo "$line"|awk -F "/" '{print $NF}'|sed 's/ /_/g'`
}
identyfikacja_linku () {
HOTFILE=`echo $line | grep "hotfile" | wc -l`
FILESONIK=`echo $line | grep "filesonic" | wc -l`
WUPLOAD=`echo $line | grep "wupload" | wc -l`
UPLOADED=`echo $line | grep "ul.to" | wc -l`
UPLOADED2=`echo $line | grep "uploaded.to" | wc -l`
if [ $HOTFILE = 1 ] then
IDENTYFIKACJA_LINKU="hotfile"
fi
if [ $FILESONIK = 1 ] then
IDENTYFIKACJA_LINKU="filesonic"
fi
if [ $WUPLOAD = 1 ] then
IDENTYFIKACJA_LINKU="wupload"
fi
if [ $UPLOADED = 1 ] || [ $UPLOADED2 = 1 ] then
IDENTYFIKACJA_LINKU="uploaded"
fi
}
proces_wget () {
PROCES_WGET=`ps|grep -v grep|grep "/opt/bin/wget"|wc -l`
}
polaczenie_z_internetem () {
POLACZENIE=`ping 213.180.146.27 -c 1 -q -W 1 2> /dev/null | grep "1 packets received" | wc -l`
}
clear
zielony="\033[01;32;40m"
czerwony="\033[01;31;40m"
czerwony_rev="\033[07;31;40m"
szary="\033[01;34;40m"
zolty="\033[01;33;40m"
szary_rev="\033[07;34;40m"
normalny="\e[0m"
echo -e $szary"WITAM - SKRYPT WGET AKTYWNY$normalny"
cp $LINK /nas/link.tmp2
proces_wget
while [ "$PROCES_WGET" -le "$1" ] && [ "$PROCES_WGET" != "0" ] do
echo
echo -e "Działaj± w tle procesy wget - "$czerwony"oczekiwanie na zakończenie"$normalny
sleep 300
proces_wget
done
for (( m=1; "`cat $LINK | grep "http" | wc -l`" != "0" && "$m" <= "$3"; m++ )); do
polaczenie_z_internetem
while [ "$POLACZENIE" = "0" ] do
echo -e $zielony"BRAK POLACZENIE Z INTERNETEM"$normalny
sleep 300
killall wget
polaczenie_z_internetem
done
echo -e $zielony"SIEC GLOBALNA - DOSTEPNA"$normalny
if [ -e "/nas/link.tmp" ] then
rm "/nas/link.tmp"
fi
echo -e "$szary ^^^^^^^^^$normalny"
echo -e "$szary^^^^^^^^^^ $zolty"$m"$szary ^^^^^^^^^^$normalny"
echo -e "$szary ^^^^^^^^^$normalny"
a=`cat $LINK | wc -l`
for (( i=1; "$i" <= "$a"; i++ )) ; do
b=`awk "NR==$i" $LINK |awk -F "/" '{print $NF}'|sed 's/ /_/g'`
c="$PLIKI_LOGU/$b"
d=`cat $c 2> /dev/null | grep "saved" | wc -l`
e=`cat $c 2> /dev/null | grep "100%" | wc -l`
f=`cat $c 2> /dev/null | grep 'The file is already fully retrieved' | wc -l`
if [ "$d" != 0 ] && [ "$e" != 0 ] || [ "$f" != 0 ] then
echo -n >> /nas/link.tmp
echo -e "$zielony==================================================="
echo -e "PLIK ZOSTA POBRANY"
echo -e "$zolty`awk "NR==$i" $LINK | awk -F "/" '{print $NF}'`"
echo -e "$zielony===================================================$normalny"
else
awk "NR==$i" "$LINK" >> /nas/link.tmp
echo -e "$czerwony==================================================="
echo -e "HOUSTON MAMY PROBLEM"
echo -e "$zolty`awk "NR==$i" $LINK | awk -F "/" '{print $NF}'`"
echo -e "$czerwony===================================================$normalny"
fi
done
if [ -e "/nas/link.tmp" ] then
mv "/nas/link.tmp" "$LINK"
fi
while read line; do
proces_wget
until [ $PROCES_WGET -lt $1 ] do
sleep 5
proces_wget
done
identyfikacja_linku
if [ "$IDENTYFIKACJA_LINKU" = "hotfile" ] then
nazwa_logu
/opt/bin/wget --tries=5 -c -b --auth-no-challenge --limit-rate=$2'k' --user=$LOGIN_HOTFILE --password=$HASLO_HOTFILE -o "$PLIKI_LOGU/$NAZWA_LOGU" -O "$ZAPIS/$NAZWA_LOGU" $line &> /dev/null
fi
if [ "$IDENTYFIKACJA_LINKU" = "filesonic" ] then
nazwa_logu
/opt/bin/wget --tries=5 -c -v -b --auth-no-challenge --limit-rate=$2'k' --user=$LOGIN_FILESONIC --password=$HASLO_FILESONIC -o "$PLIKI_LOGU/$NAZWA_LOGU" -O "$ZAPIS/$NAZWA_LOGU" $line &> /dev/null
fi
if [ "$IDENTYFIKACJA_LINKU" = "wupload" ] then
nazwa_logu
/opt/bin/wget --tries=5 -c -v -b --auth-no-challenge --limit-rate=$2'k' --user=$LOGIN_WUPLOAD --password=$HASLO_WUPLOAD -o "$PLIKI_LOGU/$NAZWA_LOGU" -O "$ZAPIS/$NAZWA_LOGU" $line &> /dev/null
fi
if [ "$IDENTYFIKACJA_LINKU" = "uploaded" ] then
nazwa_logu
/opt/bin/wget -q --save-cookies="/tmp/cooki" --post-data="id=$LOGIN_UPLOADED&pw=$HASLO_UPLOADED&_=" -o "/tmp/login" -O "/tmp/login" http://uploaded.to/io/login
/opt/bin/wget --tries=5 -c -v -b --limit-rate=$2'k' --load-cookies "/tmp/cooki" -o "$PLIKI_LOGU/$NAZWA_LOGU" -O "$ZAPIS/$NAZWA_LOGU" $line &> /dev/null
if [ -e "/tmp/cooki" ] then
rm "/tmp/cooki"
fi
if [ -e "/tmp/login" ] then
rm "/tmp/login"
fi
fi
done < $LINK
proces_wget
while [ "$PROCES_WGET" -le "$1" ] && [ "$PROCES_WGET" != "0" ] do
sleep 5
proces_wget
done
done
echo "********************************************************************************"
echo "POBIERANIE PLIKOWZOSTALO ZAKONCZONE - NACISNIJ ENTER - "
echo "********************************************************************************"
read
exit 0
Skrypt wywołujemy z 3 parametrami
$1 ilość jednocześnie pobieranych linków
$2 prędkość dla pojedynczego pliku (jeśli pobieramy 3 pliki to łączna zajętość pasma jest równa 3 * $2) podawana w kb/s
$3 ilość powtórzeń dla źle pobranych linków
To oznacza, że skrypt pobierze na raz 2 pliki, każdy z nich będzie miał ustawiona prędkość 2000kb/s czyli łącznie 4000 kb/s i powtórzy proces dla linków niedobranych 5 razy
Objaśnienie działania:
1. Skopiowanie pliku z linkami potrzebny przy 2 skrypcie zmieniającym nazwy
2. Zbadanie czy istnieją inne procesy wget w tle jeśli tak to czeka, aż się zakończą jeśli nie przechodzi dalej
3. Wejście w pętle powtórzoną $3 ilość razy
4. Sprawdzenie połączenia z Internetem jeśli ping dotrze do onetu to pomija czekanie, a jeśli ping da wynik 0 to czeka 10 min aż do otrzymania wartości 1 co jest równoznaczne z dostępem do internetu
5. Badanie wszystkich linków z pliku link poprzez logi wygenerowanych przez wget. Jeśli zostanie w logu odnaleziona fraza 100% i saved plik zostaje uznany za pobrany, wyświetlany jest komunikat o poprawnym pobraniu pliku, oraz zostaje wpisana pusta linia w tymczasowy plik z linkami. Jeżeli jednak nie zostaną znalezione w logu te warunki, plik zostaje uznany jako źle pobrany, zostaje wyświetlony komunikat o problemie z plikiem, link tego pliku ląduje w pliku tymczasowym (procedura zostaje wykonana dla wszystkich linków znajdujących się w pliku link)
6. Zamiana pliku link tymczasowego z oryginalnym
7. Wskakuje do pętli pobierając do zmiennej link z pliku link (wykonuje się tyle razy ile jest linków w pliki z linkami. Sprawdza procesy wget, jeśli = 0 to odpala pierwszy plik, sprawdza procesy jeśli liczba procesów wget w tle jest < $1 to zostaje odpalony następny plik do momentu aż liczba procesów w tle = $1 wtedy wskakuje w pętle, która oczekuje pewną ilość czasu po czym sprawdza warunek ilość procesów w tle < $1 wtedy odpala następny plik i tak aż przeleci cała listę linków.
8. Wskakuje w następna pętle, która tym razem ma za zadanie poczekać aż wszystkie rozpoczęte procesy wget zostaną ukończone by ich logi były kompletne.
9. Powrót to punktu 3
Ważna i podstawowa sprawą jest zachowanie zgodności ścieżek zapisanych w skrypcie ze środowiskiem w jakim pracuje, czyli jeśli ktoś chciałby używać skryptu na starszych wersjach Tomato gdzie zamiast nas jest mmc to musi pozmieniać każde odniesienie do nas na mmc to tyczy się również innej lokalizacji podmontowanych partycji innym słowem ścieżki do katalogów muszą się zgadzać i muszą istnieć z racji tego, że tworzą się pliki tymczasowe.
--- ZAKOŃCZENIE ---
Oczywistą oczywistością jest nadanie praw wykonywalnych dla skryptów czyli:
chmod +x <ścieżka do pliku>
Teraz zajmiemy się automatyzacja całego procesu.
1. Odpalenie przy restarcie prądowym
2. Odpalenie o określonych godzinach z innymi parametrami pobierania
Z racji tego, że niektórzy maja Internet podzielony na strefy lub chcą pobierać ciągle pliki ale też nie chcą zapychać całego łącza podczas godzin dziennych - by inni użytkownicy mogli komfortowo korzystać z Internetu, użyjemy skryptu odpalanego z init dodając na samym początku sleep 120:
Tworzymy skrypt w lokalizacji /nas/Skrypty/ z treścią:
I w ten oto sposób po restarcie prądowym będzie nam się odpalał skrypt w zależności od godziny Oczywiście edytujemy w nim odpowiednie wartości dostosowane do naszych potrzeb czyli zmienne RANO, WIECZOR i parametry skryptu.
Powyższy przykład przedstawia sytuacje gdy nastąpił restart urządzenia, a co w momencie gdy dostawca energii nie zawiódł ??
Z pomocą przychodzi nam Schedule i pozycje
- Custom 1
- Custom 2
Włączamy, ustawiamy czas o jakim ma się wykonać i wpisujemy:
W ten oto sposób zmienimy prędkości pobierania plików o odpowiednich godzinach nie zabijając już pobieranych by nie marnować transferu i czasu, a jeśli ktoś koniecznie chce natychmiast przejść na nowa prędkość poświęcając pliki pobierane i ponownie je pobrać po killall screen musi dodać killall wget.
Można dołożyć inne serwisy Premium, które obsługiwał by skrypt lecz warunkiem jest to, że wget musi sobie radzić z autoryzacja i pobieraniem plików, oraz zainteresowany musiał by mi udostępnić dostęp do swojego konta w celach testowych.
Mam nadzieje, że przedstawione tutaj rozwiązania zadziałają nie tylko na moim sprzęcie - Miłego użytkowania.
W miarę wyłapywania problemów będą wprowadzana zmiany w zakresie posiadanej przez ze mnie wiedzy.
---------- WGET + NO_PREMIUM, ZWYKŁE LINKI (bez autoryzacja) ----------
else
awk "NR==$i" "$LINK" >> /nas/link.tmp
echo -e "$czerwony==================================================="
echo -e "HOUSTON MAMY PROBLEM"
echo -e "$zolty`awk "NR==$i" $LINK | awk -F "/" '{print $NF}'| sed 's/ /_/g'`"
echo -e "$czerwony===================================================$normalny"
fi
done
if [ -e "/nas/link.tmp" ] then
mv "/nas/link.tmp" "$LINK"
fi
while read line; do
proces_wget
until [ $PROCES_WGET -lt $1 ] do
sleep 5
proces_wget
done
nazwa_logu
/opt/bin/wget --tries=0 -c -b --limit-rate=$2'k' -o "$PLIKI_LOGU/$NAZWA_LOGU" -O "$ZAPIS/$NAZWA_LOGU" $line &> /dev/null
done < $LINK
proces_wget
while [ "$PROCES_WGET" -le "$1" ] && [ "$PROCES_WGET" != "0" ] do
sleep 5
proces_wget
done
done
echo "********************************************************************************"
echo "POBIERANIE PLIKOWZOSTALO ZAKONCZONE - NACISNIJ ENTER - "
echo "********************************************************************************"
read
exit 0
Ten skrypt pozwala zachować funkcjonalność powyższego ale umożliwia nam ściąganie dowolnego linku, do którego nie potrzeba autoryzacji.
Edytowany przez hermes-80 dnia 30-01-2012 13:39
=============================================================== Netgear WNR3500L v1 Podziękowania dla administracji Openlinksys.info!
· Łącznie użytkowników: 24,126 · Najnowszy użytkownik: goldi111
Czat
Musisz się zalogować, aby opublikować wiadomość.
servee
24-01-2025 18:18
Światłowód + mediakonwenter. Ekranowana skrętka nie jest wymagana, taką sytuację już zastałem. Zamierzam ją wymienić na zwykłą. Da to coś?
shibby
17-01-2025 07:45
a ta skrętka ekranowana o której piszesz to jakiś wkopany przewód do bramy/furtki/kamer y zewn? Jak tak to jego też przez zabezpieczenie podepnij.
shibby
17-01-2025 07:43
no to pora zabezpieczyć kable LAN zabezpieczeniami przeciwprzepięciow ymi - tanio nie będzie. Jak przychodzi ci internet? Skrętką czy światłem? Jak skrętką to zacząłbym od tego.
servee
12-01-2025 12:52
Ponownie padły mi wszystkie porty sieciowe w routerze - to już 3-ci w 6 m-cy. Podejrzany to ekranowana, nieuziemiona skrętka - 12mb. Czy jest to możliwe?
dawidt
21-12-2024 01:09
siema
Maniek91PL
06-11-2024 22:37
dzięki !
maxikaaz
29-10-2024 14:27
@Maniek91PL - Administration=> Admin Access, i tam masz "Allow Wireless Access" do zaznaczenia
Maniek91PL
26-10-2024 22:07
siemka! ktoś przypomni co się ustawiało jeśli nie mogę wejść od strony wifi do tomato? od lan działa
overflow2
04-10-2024 17:34
Kupowałem Asusy n10u albo n12d1 ale nie widzę ich, chyba już nie produkują, Chodzi o coś nowego i taniego. Transfery niewielkie.
maxikaaz
04-10-2024 09:38
@overflow2 patrząc po dostępności funkcji w nowych kompilacjach, to chyba nawet WRT54G/GL jeszcze ma OpenVPN, albo jakiś odpowiednik... zależy, na jakie transfery liczysz.