Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

Aller au contenu | Aller au menu | Aller à la recherche


lundi 27 avril 2009

Script perl pour extraire les liens d'une page Web

Il y a un très bon module perl pour celà 

root@olivia:~# apt-cache search linkextor
libhtml-linkextractor-perl - Perl module used to extract links from HTML documents
On l'installe en faisant
apt-get install libhtml-linkextractor-perl
Ensuite on récupère le script qui lui est associé
wget http://plasmasturm.org/code/linkextor/linkextor -O linkextor
chmod +x linkextor

Pour toutes les possiblités possibles, il faut faire

./linkextor -h

Combiné par exemple à  wget notamment pour que ce dernier recrache en STDIN, on peut par exemple extraire les liens du site www.lemonde.fr dans les ancres a pointant contenant le mot-clé actualité

root@olivia:~# wget -q 'http://www.lemonde.fr' -O - | ./linkextor  -f 'a:href:actualite' -b -
/actualite-medias/article/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
/actualite-en-continu/
/actualite-en-continu/
/actualite-medias/article/2009/04/24/la-publicite-pour-les-sites-de-paris-en-ligne-cree-la-polemique_1184981_3236.html#ens_id=628863
/actualite-medias/article/2009/04/22/hersant-va-ceder-le-journal-de-l-ile-de-la-reunion-a-un-entrepreneur-local_1183918_3236.html#ens_id=1183992
/actualite-medias/article/2009/04/21/le-csa-va-comptabiliser-le-temps-de-parole-du-chef-de-l-etat_1183677_3236.html#ens_id=1176471
/actualite-medias/reactions/2009/04/21/le-csa-va-comptabiliser-le-temps-de-parole-du-chef-de-l-etat_1183677_3236.html
/actualite-medias/article/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
/actualite-medias/reactions/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
/actualite-medias/article/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
http://www.lemonde.fr/qui-sommes-nous/article/2008/01/02/telerama-fr-toute-l-actualite-culturelle-a-porte-de-clic_995453_3386.html

samedi 25 avril 2009

Ajouter Sqlite3 à  Php5

Par défaut la version embarquée de SQLite que j'ai avec php est une 2.X.Y. Il est possible de recourir à  sqlite3. La version 3 de SQLite offre plus de fonctionnalités que la version 2. Pour celà  il faut l'installer comme indiqué dans ce billet

Le site du projet php-sqlite3 est http://php-sqlite3.sourceforge.net/

Installation

On procède donc ainsi

wget http://fastbull.dl.sourceforge.net/sourceforge/php-sqlite3/sqlite3-0.5.tgz -O - | tar xzf -
cd sqlite3-0.5/
phpize
./configure --with-sqlite3
make
make install

Puis dans php.ini, il faut ajouter la ligne

extension=sqlite3.so

On redémarre ensuite apache pour prendre en compte la nouvelle extension

En pointant dans un fichier vers la fonctionnalité phpinfo(), on devrait avoir

SQLITE3

SQLite3 support enabled
sqlite3 library version 3.4.2

Création d'une table

On va crée la base test.sqlite3 contenant la table semaine

root@olivia:/var/www/test# sqlite3 test.sqlite3
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> CREATE TABLE semaine(idjour smallint primary key,jour_ref text);
sqlite> INSERT INTO semaine VALUES (1,'Lundi');
sqlite> INSERT INTO semaine VALUES (2,'mardi');
sqlite> INSERT INTO semaine VALUES (3,'mercredi');
sqlite> INSERT INTO semaine VALUES (4,'jeudi');
sqlite> INSERT INTO semaine VALUES (5,'vendredi');
sqlite> INSERT INTO semaine VALUES (6,'samedi');
sqlite> INSERT INTO semaine VALUES (7,'dimanche');
sqlite> .quit

Maintenant on énumére le contenu de la semaine

root@olivia:/var/www/test# sqlite3 test.sqlite3
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .tables
semaine
sqlite> SELECT * FROM semaine;
1|Lundi
2|mardi
3|mercredi
4|jeudi
5|vendredi
6|samedi
7|dimanche
sqlite> .exit

Exemple de script

Voici un exemple asez simple d'utilisation

root@olivia:/var/www/test# cat sqlite3-test.php 
<?php
$db = sqlite3_open("test.sqlite3");
if (!$db) die ("Impossible d'acceder a la base");


/*
 * Requete pour la lecture de la table
 */

$query = sqlite3_query($db, "SELECT * FROM semaine ORDER BY 1 ASC");
if (!$query) die (sqlite3_error($db));

/*
 * utilisation de sqlite3_fetch_array() qui renvoit un table
 * associatif
 *
 */

while ( ($row = sqlite3_fetch_array($query)))
{
        printf("%d\t%s\n", $row['idjour'], $row['jour_ref']);
}

/*
 * On ferme tout !
 */
sqlite3_query_close($query);
sqlite3_close ($db);
?>
A l'exécution du script on aura alors
root@olivia:/var/www/test# /usr/lib/cgi-bin/php -q sqlite3-test.php
1       Lundi
2       mardi
3       mercredi
4       jeudi
5       vendredi
6       samedi
7       dimanche

vendredi 10 avril 2009

[Lighttpd 1.4.20] Script pour démarrer/arrêter/redémarrer

Il existe un script depuis les sources de lighttpd pour l'installer en tant que service. Le script en question est lighttpd-1.4.20/doc/rc.lighttpd qu'il faut adapter à  ses propres besoins.

Personellement, je me suis fait ce petit script shell tout simple

root@olivia:~# cat lighttpd-manager.sh 
# lighttpd version
VERSION="1.4.20";

LIGHTTPD_ROOT_PATH="/opt/lighttpd-${VERSION}";
LIGHTTPD_CONFILE="${LIGHTTPD_ROOT_PATH}/conf/lighttpd.conf";

test -f ${LIGHTTPD_CONFILE} || { echo "can not find '${LIGHTTPD_CONFILE}'";exit 1;} 

PATH=${LIGHTTPD_ROOT_PATH}/sbin:${PATH};

function IsRunning(){
	pidof lighttpd > /dev/null;
	return $?;
}

function Msg(){
	echo -ne "\t$1";
}

case $1 in
	"status")
		IsRunning || runResult="not";
		Msg "lighttpd is ${runResult} running\n"; 
		exit 0;
	;;
	"start")
		IsRunning && { Msg "lighttpd is already running...\n"; exit 1;}
		Msg "starting lighttpd...";
		lighttpd -f ${LIGHTTPD_CONFILE};
		sleep 0.5;
		IsRunning && { echo "[OK]";}
		IsRunning || { echo "[KO]";}
	;;
	"stop")
		IsRunning || { Msg "nothing to stop...[KO]";exit 1;}
		IsRunning && { Msg "stopping lighttpd...";killall -9 lighttpd;echo "[OK]"; exit 0;}
		exit 0;
	;;
	"restart")
		Msg "Trying to restart lighttpd...\n";
		IsRunning && { Msg  "stopping lighttpd..."; kill -9 lighttpd;echo "[OK]";sleep 0.5;}
		IsRunning || { Msg "starting lighttpd...";lighttpd -f ${LIGHTTPD_CONFILE};}
		IsRunning && { echo "[OK]";}
		IsRunning || { echo "[KO]";}
	;;
	*)
		echo " (start|stop|restart|status)";
		exit 0;
	;;
esac

On procéde à  quelques tests

root@olivia:~# ./lighttpd-manager.sh restart
        Trying to restart lighttpd...
        stopping lighttpd...[OK]
        starting lighttpd...[OK]
root@olivia:~# ./lighttpd-manager.sh stop
        stopping lighttpd...[OK]
root@olivia:~# ./lighttpd-manager.sh restart
        Trying to restart lighttpd...
        starting lighttpd...[OK]
root@olivia:~# ./lighttpd-manager.sh start
        lighttpd is already running...

jeudi 9 avril 2009

[Apache] Lutter contre les messages "ad.yieldmanager.com" qui polluent les logs...

Avant hier Ludo m'a appelé en urgence pour me dire que ma machine avait redémarré...Rien d'urgent, si ce n'est qu'il a fallut que je rallume

grep "http://ad.yieldmanager.com/" /var/log/apache/access.log|grep "08/Apr/2009" > /tmp/manager.bad
sort -r /tmp/manager.bad|tail -n 1;tail  -n 1 /tmp/manager.bad
61.139.105.162 - - [06/Apr/2009:15:11:45 +0200] "GET http://ad.yieldmanager.com/imp?z=0&Z=0x0&s=500843&y=30 HTTP/1.1" 302 0 "http%3A%2F%2Fwww.freegameskingdom.com%2Findex.html" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)" "-"
61.139.105.162 - - [07/Apr/2009:23:09:52 +0200] "GET http://ad.yieldmanager.com/imp?z=0&Z=0x0&s=529628&y=30 HTTP/1.1" 403 289 "http%3A%2F%2Fwww.onlineea.com%2Findex.html" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)" "-"

L'attaque a donc duré plus de 33h00...

Avoir le paramètre ProxyRequests Off dans la conf d'apache a retourné des http_code=404 pour un moment mais celà  n'a pas suffit.

Le mieux a donc été de faire comme suit en ajoutant ceci dans le fichier de configuration

order deny,allow
deny from ccteam.ru
deny from mobi-info.ru
deny from t35.com
deny from statcounter.com
deny from criticaldamageclan.tripod.com
deny from ad.yieldmanager.com
deny from vernet.lv
deny from apnic.net
deny from 64.92.199.0/24
deny from 64.13.192.0/18
deny from 69.56.128.0/17
deny from 79.112.0.0/13
deny from 137.226.0.0/16
deny from 193.219.28.0/24
deny from 220.129.0.0/16
deny from 220.130.0.0/15
deny from 220.132.0.0/14
deny from 220.136.0.0/13
deny from 222.32.0.0/11
deny from anonym.to
deny from 80.190.192.48
deny from 84.14.116.228
deny from 195.2.114.1
deny from 220.194.47.69
deny from 210.51.10.42
deny from 88.169.192.158
deny from 62.215.3.44
deny from 87.242.116. 
deny from 87.242.117.
deny from 81.177.26. 
deny from 81.177.27.
deny from 125.30. 
deny from 87.239.57. 
deny from 61.240.
deny from 61.139. # Pour la plage d'IP que je veux faire sauter
deny from 61.241.
deny from 61.242. 
deny from 61.243. #China Beijing China United Telecommunications Corporation
deny from 190.129. #Bolivia Cochabamba Entel S.a. - Entelnet
deny from 90.156.169. #Russian Federation Maxhosting Ltd
deny from 195.76.242.227 #Spain Barcelona Sati Grupo Textil S.a
deny from 41.206.160. #South Africa Neotel
deny from 212.72.30. #South Africa Neotel
deny from 83.222.22. #Russian Federation Moscow Masterhost-hst
deny from 83.222.23. #Russian Federation Moscow Masterhost-hst
deny from 85.115.112. #Latvia Riga Mits Lv Sia
deny from 85.115.113. #Latvia Riga Mits Lv Sia

On relance le serveur et el client reçoit

root@olivia:~# grep -e '61.139.105.162' /var/log/apache/error.log|grep -e 'denied' > /tmp/manager.denied
root@olivia:~# sort -r /tmp/manager.denied|tail -n 1;tail  -n 1 /tmp/manager.denied 
[Tue Apr  7 00:56:10 2009] [error] [client 61.139.105.162] client denied by server configuration: /var/www/imp
[Tue Apr  7 23:09:52 2009] [error] [client 61.139.105.162] client denied by server configuration: /var/www/imp

Bingo !!!

Depuis je n'ai plus revu cette IP...