Automatyczne przeglądanie kont na naszej klasie

Ostatnio zapragnąłem trochę posurfować po największym portalu społecznościowym w Polsce jakim jest Nasza-Klasa. Poniżej prościutki kod odwiedzający losowe konta.

Deklarujemy zmienne do logowania, plik przetrzymujący ciasteczka i nazwę przeglądarki z jaką będzie się przedstawiał nasz automat.

$cookie = 'cookie.txt';

$loginUrl = 'http://nasza-klasa.pl/login';
$login = 'login';
$password = 'pass';
$useragent = 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3';

Logujemy się na konto n-k:

$ch = curl_init( $loginUrl );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_COOKIE, $cookie);
curl_setopt( $ch, CURLOPT_USERAGENT, $useragent );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, 'login='.$login.'&password='.$password );
curl_setopt( $ch, CURLOPT_REFERER, 'http://nasza-klasa.pl/' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
$afterLogin = curl_exec($ch);
curl_close($ch);

Wywołujemy adresy losowych kont:

for( $i=1; $i<=100; $i++ ) {
	$profileID = rand( 1000, 15000000 ); // rand
	
	$ch = curl_init( 'http://nasza-klasa.pl/profile/'.$profileID );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie);
	curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie);
	curl_setopt( $ch, CURLOPT_COOKIE, $cookie);
	curl_setopt( $ch, CURLOPT_USERAGENT, $useragent );
	curl_setopt( $ch, CURLOPT_HEADER, 0);
	curl_setopt( $ch, CURLOPT_REFERER, 'http://nasza-klasa.pl/' );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
	$profile = curl_exec($ch);
	curl_close($ch);
	
	if( !preg_match( '/Nie znaleziono strony \(404\)/', $profile ) ) {
		// konto istnieje
		// z danymi konta możemy zrobić co chcemy...
	} else {
		// nie ma konta takiego konta
	}
}

Ustawiamy w contab'ie wywołanie skryptu co 10 minut:

*/10 * * * * curl -s -o /dev/null PATH_TO_SCRIPT

Z uwagi na bardzo dużą liczbę kont prawdopodobieństwo odwiedzenia w niedługim czasie 2 razy tego samego konta jest stosunkowo niewielkie.

Jednak jeżeli chcemy odwiedzić każde konto jedynie raz to należy zmodyfikować skrypt tak aby przy każdym wywołaniu iterował po kolejnej setce kont. Informacje o ID od którego mamy zacząć możemy zapisywać w bazie danych lub w pliku.

Autmatyczny backup

Kopia zapasowa – przydatna rzecz, warto ją mieć, jednak człowiek niezbyt często o tym pamięta gdy wszystko działa poprawnie. W momencie gdy pada system myśl o dacie ostatniego backupa jest pierwszą myślą świtającą w głowie.
Po co się tak stresować, po co polegać na zawodnej ludzkiej pamięci, lepiej napisac skrypt i niech wszystko się samo wykonuje.
Synchronizujemy katalogi zawierające dane do backupa z aktualnym stanem danych zbackupowanych

rsync -avrz $HOME/workspace/* $HOME/backup/source/workspace/
rsync -avrz $HOME/thunderbird/* $HOME/backup/source/mail/
rsync -avrz $HOME/gg/* $HOME/backup/source/gg

Następnie tworzymy archiwum zawierające bieżącą date

currDate=$(date +%Y-%m-%d);
tar -cjf $HOME/backup/archive/backup-$currDate.tar.bz2 $HOME/backup/source/*

Tak przygotowane archiwum zgrywamy w bezpieczne miejsce (np. na inna maszynę), a następnie kasujemy tymczasowe archiwum.

rsync -avrz -e ssh $HOME/backup/archive/ bezpieczny@dysk:/home/users/xxx/backup/
rm $HOME/backup/archive/backup-$currDate.tar.bz2

Następnie należy jeszcze tylko zautomatyzować wywoływanie skryptu odpowiednim wpisem w cronie:

0 15 * * fri $HOME/prog/backup.sh

W tym przypadku skrypt będzie wywoływany co tydzień w piątek o godzinie 15, tak więc od tej pory co tydzień mogę spokojnie opuszczać stanowisko pracy na weekend będąc pewnym, że moje dane są bezpieczne.

****dodane****

Aby backup mógł wykonywać się automatycznie to połączenie z bezpieczny@dysk musi być trusted (łączenie z nim bez hasła). Jest wiele sposobów aby to wykonać np:
Na komputerze, z którego robisz backup wpisz:

ssh-keygen -t dsa

Naciśnij enter kilka razy.

W twoim katalogu domowym zostanie stworzony katalog .ssh zawierające potrzebne pliki. Następnie w konsoli wpisz polecenie

ssh bezpieczny@dysk ‘test -d .ssh || mkdir -m 0700 .ssh ; cat >> .ssh/authorized_keys && chmod 0600 .ssh/*’ < ~/.ssh/id_dsa.pub

Zostaniesz poproszony o wprowadzenie hasła na bezpieczny@dysk, wprowadź je. I to wszystko. Hasło zostanie zapamiętane.

Możesz teraz przetestować, powinieneś łączyć się przez ssh z bezpieczny@dysk bez podawania hasła.

ssh bezpieczny@dysk