Archiwum tagu ‘bash’
Badanie: adres zewnętrzny w sieci tor – Bash + SQL
Ostatnimi czasy chciałem potrenować sobie programowanie w shellu i połączyć je z kwerendami w języku SQL. Po paru godzinach przygotowań postawiłem sobie cel (aby nie programować bezcelowo, czego nienawidzę):
Napisać aplikację, która będzie badać i zapisywać adresy zewnętrzne używane po wyjściu z sieci Tor.
Przygotowanie:
Pakiety do zainstalowania: mysql-server, tor, curl.
Implementacja:
Najpierw zebrałem informacje odnośnie kluczowych poleceń:
- echo “{KWERENDA}” | mysql ${baza} –user {uzytkownik} –password={haslo} – kwerendy SQL w bashu,
- date +%Y%m%d%H%M%S,
- curl http://checkip.dyndns.com/ -s -p –socks5 localhost:9050 – pozyskiwanie zew. adresu IP,
- http://api.hostip.info/get_html.php?ip=${adres_ip} – pozyskiwanie danych o położeniu adresu,
- INET_ATON(‘{adres_ip}) oraz INET_NTOA({pole_adresu_w_bazie}) - konwersja adresu do liczby ( obliczeniowo-wydajniejsze przechowywanie w bazie).
Po godzince skrypcik był gotowy i po następnej – wstępnie przetestowany:
#!/bin/bash
#Skrypt sprawdza adres zewnętrzny po przepuszczeniu polaczenia przez siec TOR
#nastepnie zapisuje go do bazy danych (mySQL)
#spassite.wordpress.com
baza=”"
pass=”"
user=”"
OKRES=”15s”
#nie edytować poniżej tej linijki
OSTATNI=”";
while [ 1 ]; do
AKTUALNY=`curl http://checkip.dyndns.com/ -s -p –socks5 localhost:9050 | grep -o -E ‘[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+’`;
clear;
if [ "$AKTUALNY" != "$OSTATNI" ]; then
if [ -n "$AKTUALNY" ]; then
ISTNIEJE=`echo “SELECT count(adres) FROM adresy WHERE adres=INET_ATON(‘${AKTUALNY}’);” | mysql ${baza} –user ${user} –password=${pass} | grep -E ‘[0-1]+’`;OSTATNI=$AKTUALNY;
if [ $ISTNIEJE == 0 ]; then
CZAS=`date +%Y%m%d%H%M%S`;
LINK=”http://api.hostip.info/get_html.php?ip=${AKTUALNY}”
TMP=`curl -s ${LINK}`;
MIASTO=`echo $TMP | cut -d “:” -f 3 | tr -d ‘,. )(‘`;
KRAJ=`echo $TMP | cut -d “:” -f 2 | cut -d “(” -f 1 | tr -d ‘, .()’`;
echo “$CZAS $KRAJ “XXX” $MIASTO “XXX” $AKTUALNY “XXX” $OSTATNI”;
kwerenda=”INSERT INTO adresy(adres,data,kraj,miasto) VALUES INET_ATON(‘${AKTUALNY}’),NOW(),\”${KRAJ}\”,\”${MIASTO}\”);”;echo “Wykonuje kwerende: $kwerenda”;
echo “———-BLEDY?———–”;
echo “$kwerenda” | mysql ${baza} –user ${user} –password=${pass}
echo “———/BLEDY?———–”
else
echo “Adres juz istnieje w bazie”;
sleep $OKRES;
fi
fi
else
#akcje gdy taki sam
echo “Adres juz istnieje w bazie”;
sleep $OKRES;
fi
done
Do zrobienia (przy odrobinie czasu i chęci):
- wyświetlanie tabeli (narazie wywołuję ręcznie poprzez: watch ‘echo “select INET_NTOA(adres),data,kraj,miasto FROM adresy ORDER BY data DESC LIMIT 20;” | mysql zzz -u zzzz –password=zzzzzzz’ ),
- gromadzenie wiekszej ilości danych z WHOIS i magazynowanie w bazie,
- strona php z geolokalizacją.
Podsumowanie:
Skrypt spełnia swoje zadanie choć można go dopracować. Mam nadzieję, że komuś się przyda on sam, bądź jego część. Jak narazie rezultat sieci Tor to zmieniony adres co 10minut.
NapiProject (linux) – skrypt rekurencyjny
![]()
Motywacja
Alternatywą dla znanego wszystkim programu NapiProject pod linuksa (poza odpalaniem Napi przez Wine) jest programik napisany w pythonie autorstwa panów(tak mniemam): gim,krzynio,dosiu,hash.
Programik mimo, iż działa wzorowo nie ma opcji przeszukiwania rekurencyjnego katalogów, czyli w uproszczeniu: podaj_katalog -> znajdź_filmy -> znajdź_do_nich_napisy. W takim właśnie uproszczeniu i bez fajerwerków (sprawdzania np. czy katalog istnieje etc) działa poniższy skrypcik.
Skrypt wygląda następująco:
#!/bin/bash
#—————————————#
#skrypt by spas (spassite.wordpress.com)#
#—————————————#
dir=”/katalog/z/filmami/”
ext=”.avi”; #rozszerzenie do wyszukania
find $dir -name “*.avi” | while read file
do
name=`echo $file | sed ’s/.avi//’`; #utnij rozszerzenie
file=`echo $file | sed ’s/ /\ /’`;
if [ ! -e "${name}.txt" ]; then #czy napis jeszcze niepobrany?
echo “${name}.avi”
./napi.py “$file”; #wywolaj skrypt dla filmów bez napisów
fi
done
Aby uruchomić skrypt:
chmod +x plik_z_powyższym_skryptem.sh
./plik_z_powyższym_skryptem.sh
Do jego działania niezbędny jest napi.py w tym samym katalogu co skrypt, oraz paczka “p7zip-full” (sudo aptitude install p7zip-full), bez której napi.py nie będzie poprawnie pobierać napisów.
Lista życzeń (czyt. co zrobię jak będę miał chwilkę):
- sprawdzanie, czy katalog istnieje
- ścieżka do katalogu odczytywana ze zmiennych wywołania
- obsługa wielu rozszerzeń
- …
Pliki do pobrania:
napi.py – program ściągający napisy do pobrania
Dodaj komentarz
Komentarze (1)