Archiwum tagu ‘sql’

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

Skrypt w akcji

Skrypt w akcji

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.