Plan du KiWi
Si vous n'avez pas trouvé votre bonheur dans les liens plus haut, le plan vous montrera les quelques pages “cachées” de ce kiwi !
Si vous avez une connection partagée avec plusieurs personnes, vous avez peut être envie de savoir un petit peu ce que ces gens font de votre connection ? Curiosité malsaine ? Sans aucun doute. Mais après tout, si il se passe des choses illégal, c'est sur vous que ça tombera.
Tout d'abord, comment faire ? On installe la suite “dsniff” sur la machine qui route tout le traffic, cette suite comprends urlsnarf qui permet d'attraper les requêtes HTTP GET au vol et de vous les restituer. Vous voyez donc des informations du type :
Cerise - - [11/Apr/2008:20:22:29 +0000] "GET http://www.google.fr/intl/fr_fr/images/logo.gif HTTP/1.1" - - "http://www.google.fr" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; en-us) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13"
Ce que l'on va faire c'est de créer un pipe sur le routeur:
# mkfifo /chemin/du/pipe
Une fois que c'est on va démarrer urlsnarf, par exemple avec un script dans ”/etc/init.d” :
#! /bin/sh case "$1" in start) echo -n "Starting urlsnarf: " start-stop-daemon --start --quiet --exec /usr/sbin/urlsnarf > /chemin/du/pipe ;; stop) echo -n "Stopping urlsnarf: " start-stop-daemon --stop --oknodo --quiet --exec /usr/sbin/urlsnarf > /chemin/du/pipe ;; restart|force-reload) echo -n "Restarting urlsnarf: " start-stop-daemon --stop --oknodo --quiet --exec /usr/sbin/urlsnarf > /chemin/du/pipe sleep 1 start-stop-daemon --start --quiet --exec /usr/sbin/urlsnarf > /chemin/du/pipe ;; *) echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
Sachant que urlsnarf est plutôt “lourd” au fur et à mesure du temps (il n'est pas réellement prévu pour loguer), on va le redémarrer toutes les heures avec un cron :
* */1 * * * ./etc/init.d/urlsnarf.sh restart
Si vous n'avez pas d'espace sur votre routeur (type WRT par exemple), vous pouvez toujours créer un partage Samba sur une autre machine (qui possède MySQL) et le monter depuis le routeur, vous créer votre pipe dans ce partage et vous mettez toute la partie script sur l'autre machine. urlsnarf devant être sur le routeur !!
Une fois que tout cela est en place, on va créer notre base de données : (Je l'ai faîtes très simples pour mon usage, si vous voulez faire autre chose où la complexifié n'hesitez pas à m'envoyer un mail, maxime.hadjinlian_at_gmail dot com)
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Database: `urlsnarf` -- CREATE DATABASE `urlsnarf` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `urlsnarf`; -- -------------------------------------------------------- -- -- Table structure for table `logs` -- CREATE TABLE IF NOT EXISTS `logs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `machine` varchar(15) NOT NULL, `date` varchar(30) NOT NULL, `url` varchar(50) NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `machine` (`machine`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Et maintenant, le script qui va faire la pièce angulaire de tout cela. Il va lire depuis le pipe en continue et mettre ces données dans la base de données. C'est un script python très basique, pour cela il vous faut le package MySQLdb.
Vous pouvez tester si vous l'avez dans un shell python (tapez python dans votre Terminal) et faîtes : import MySQLdb
Si vous avez une erreur de ce type :
Traceback (most recent call last): File "<stdin>", line 1, in ? ImportError: No module named MySQLdb
C'est qu'il n'est pas installé, pour ce faire, allez sur l'adresse plus haut pour télécharger la dernière version puis :
$ tar xfz MySQL-python-1.2.0.tar.gz $ cd MySQL-python-1.2.0 $ python setup.py build $ su # or use sudo # python setup.py install
Refaîtes le test, normallement c'est bon.
Vous n'avez plus qu'à créer un fichier avec ce code dedans :
#! /usr/local/bin/python import os, sys, MySQLdb connectionObject = MySQLdb.connect(host='localhost', user='utilisateur', passwd='motdepasse', db='urlsnarf') c = connectionObject.cursor() urlpipe = open('pipe','r+'); while 1: li = urlpipe.readline() #Si y'a rien dans le pipe, on passe. if li != '': ch = li.split('-') #Nom machine machine = ch[0] machine = machine.strip() #Date date = ch[2] date = date[2:28] #URL url = ch[5] url = url.split(' ') url = url[1] c.query("insert into logs (machine,date,url) values (\""+machine+"\",\""+date+"\",\""+url+"\")") c.commit()
Vous le ranger dans un coin, vous vous faîtes un petit script d'init si vous le souhaitez et après ça doit marcher tout seul.