1 (edytowany przez tenfilip 2014-05-04 20:48:19)

Temat: Adblock.sh - analiza kodu

Hej,

postanowiłem przejrzeć kod adblock.sh (http://eko.one.pl/?p=openwrt-adblock) i być może uzupełnić go o parę brakujących URL.
Przy okazji chcę się nauczyć trochę o linuksie.

Byłbym wdzięczny za Wasz komentarz, poprawki i odpowiedzi na pytania.

#!/bin/sh
rm -f /tmp/block.hosts # usuwa plik block.hosts, opcją force (bez interakcji z uzytkownikiem)

#wget sluzy do sciagania plikow po http. Opcja q(quiet) ogranicza komunikaty do uzytkownika. Opcja 0 (--output-document=) z przełącznikiem - ma za zadanie\
# pozwolić na wyplucie sciganietego pliku tektstowego na domyslne wyjscie (czyli ekran uzytkownika), zamiast zwyklego zapisania w systemie plikow("na dysk).
# Znak | to tzw. pipeline. Pozwala przekierowac wynika dzialania komendy jako wejscie do kolejnej komendy.
# grep to narzędzie to wyszukiwania ciagu znaków w pliku. 

Nie ogarniam składni w tym miejscu - czemu dodane jest 127.... przed każdą nową linią?Tzn. wiem po co, ale nie wiem składnia grep działa w tym przypadku.

# Znak > przekierwuje cale wyjscie do pliku - jesli plik istnieje, nadpisuje go (czyli stary jest usuniety). Ten plik to block.build.list

wget -qO- "[url]http://www.mvps.org/winhelp2002/hosts.txt[/url]" | grep "^127.0.0.1" > /tmp/block.build.list 

# Znak >> powoduje dopisanie do juz istniejacego pliku. Dopisujemy do poprzedniego (block.build.list), tak, zeby polaczyc kilka plikow w jeden
# polecenie jest powielone dla roznych list - dzieki temu mozemy uzywac kilka list

wget -qO- "[url]http://www.malwaredomainlist.com/hostslist/hosts.txt[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "[url]http://hosts-file.net/.\ad_servers.txt[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "[url]http://adaway.org/hosts.txt[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "[url]http://pgl.yoyo.org/as/serverlist.php?showintro=0;hostformat=hosts[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list

no tu bedzie grubo.... {$1=$1} i cały awk jest nieco "niestrawny"

# awk to wywołanie skryptu,zawartego pomiędzy dwoma znakami ' 
#    pierwsze polecenie {$1=$1} to "głupi" warunek sprawdzający czy pierwszy wiersz jest pierwszym wierszem. Z tego co rozumiem, jest to potrzebne 
#    do wymuszenia na awk przetworzenia pola i usunięcia spacji (specyfika awk, niekoniecznie jest to logiczne) 
#    drugie polecenie {gsub(/\r/,"") ma za zadanie przetworzyć koniec wiersza w pliku ("DOSowy") na strawny dla Linuxa 
#    print wyświetla bieżący rekord
#      block.build.list|sort|uniq ma za zadanie przekiewoac plik do sortowania (sort) i usuwania duplikatów (uniq). Całość podana jest jako
#    argument dla polecenia dla awk. Czyli skrypt {$1=$1}{gsub(/\r/,"")}{print } wykonywany jest na /tmp/block.build.list|sort|uniq
# Znak > przekierowuje wyjscie do wskazanego pliku

awk '{$1=$1}{gsub(/\r/,"")}{print }' /tmp/block.build.list|sort|uniq > /tmp/block.build.before

# Usuwa poprzedni plik, ktorego zawartosc zostala juz przetworzona i zapisana do nowego pliku. Uzycie -f (force) zapewnia brak koniecznosci 
# potwierdzenia operacji przez uzytkownika 

rm -f /tmp/block.build.list

# Grep wyswietli wiersze z pliku block.build.before z pominieciem tych, które są w pliku white.list. 

Po co jest -f, nie mam pojęcia.

# Znak > przekieruje wszystko do nowo utworzonego pliku block.hosts

grep -vf /etc/white.list /tmp/block.build.before > /tmp/block.hosts

# Ponownie - usuwanie starego pliku po jego przetworzeniu i zapisaniu nowego

rm -f /tmp/block.build.before

# Restart uslugi odpowiedzialnej za DNS powoduje zaczytanie pliku block.hosts do pamięci i korzystanie z niego przy rozwiązywaniu nazw DNS

/etc/init.d/dnsmasq restart

# exit to zamknięcie skryptu. Wartosc 0 ma wskazac wywolującemuy, ze nie bylo bledu, jesli program wywal ten exit.

exit 0

Tak jak napisałem, robię tą analizę dla siebie, ale chciałbym żeby została na forum (najlepiej poprawiona), może komuś pomoże lepiej zrozumieć linux / openwrt.

Komentarze są "po bashu", bo chcę żeby było można zmieniać/czytać kod bezpośrednio w WinSCP.

2

Odp: Adblock.sh - analiza kodu

f to force, awk musisz przeczytać. 127.0.0.1 to adres lokalny czyli po te adresy nie będzie sięgał do internetu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Adblock.sh - analiza kodu

Cezary napisał/a:

f to force, awk musisz przeczytać. 127.0.0.1 to adres lokalny czyli po te adresy nie będzie sięgał do internetu.

1/ Po co jest 127 to ogarniam, nie bardzo tylko rozumiem, dlaczego zapis

| grep "^127.0.0.1"

dodaje tekst na początku linii, i gdzie (przez uzycie |) http://www.mvps.org/winhelp2002/hosts.txt jest wstawiane do tego polecenia. Dziwi mnie też nieco, że zmienia każdy wiersz, ale rozumiem, że taka specyfika grep, że leci po wierszach.


2/ grep -f to chyba nie force? w każdym bądź razie bez f działa podobnie (chociaż ja chyba nie mam nic w whitelist i pewnie dlatego)

3/ awk to faktycznie overkill do poczytania

Dzięki za info smile

4

Odp: Adblock.sh - analiza kodu

Nic nie dodaje a filtruje te które 127. mają wpisane na początki linii

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Adblock.sh - analiza kodu

Niestety, ale link który był podany w oryginalnym skrypcie został przeniesiony na https i klops, wget nie da rady go sciagnac:

https://adaway.org/hosts.txt

wget: not an http or ftp url: https://adaway.org/hosts.txt

6

Odp: Adblock.sh - analiza kodu

Wrzuć sobie po prostu ten plik na inny hosting bez SSL. Łap: http://bartekk.pdg.pl/openwrt/hosts.txt. W skrypcie podmień sobie odnośnik i wsio.

7

Odp: Adblock.sh - analiza kodu

Lub używaj ewget'a lub zainstaluj pełną wersję wgeta (ew curla)

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8

Odp: Adblock.sh - analiza kodu

Juz się sciąga ok, nie trzeba nic zmieniać.

Inny problem jest:

http://www.mvps.org/winhelp2002/hosts.txt <--- na początku lini są 0.0.0.0, nie 127.0.0.1.

Więc de facto cała lista jest ignorowana.

Macie jakiś pomysł, jak to ugryźć?

9

Odp: Adblock.sh - analiza kodu

Przerób skrypt żeby brał zera zamiast 127? Lub po pobraniu zamień zera na 127. Masa możliwości co z tym zrobić.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: Adblock.sh - analiza kodu

Kiedyś sam Cezary podpowiadał jak..

sed -i 's/0.0.0.0/127.0.0.1/g' /tmp/hosts.txt
RB760iGS + RB260GS / Ryzen 5 2660 / 16G DDR4 / MiniITX - Inea 1G (https://i.imgur.com/TLbJVDw.png)
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M