Page suivante   Page précédente   Table des matières  

5. Développement d'applications Web - 2ème Partie

Par Anderson Silva afsilva@liberty.edu

Comme promis, je vais vous donner, les amis, un autre exemple de programme php3. Ce programme est très simple, et quand même assez utile.

Une nuit, j'étais à l'université en train de travailler et j'ai essayé d'appeler ma femme à la maison. Malheureusement, j'avais laissé mon ordinateur connecté ce jour-là et je ne pouvais pas la contacter. Comme Apache tourne sur mon ordinateur, j'ai donc décidé de scanner les IPs de mon FAI afin de trouver quelle était celle de mon ordinateur dans le but de faire un telnet dessus et de le déconnecter à distance.

La manière la plus rapide et la plus simple pour ce faire est soit php3, soit java, mais je ne suis pas très fan d'applets java: j'ai décidé de le faire en php3.

Et voilà comment ça se présente :


<?
    //Auteur: Anderson Silva
    //Date: September, 1999
    //Ouvre la socket, teste un ensemble d'adresses IP en séquence
    //et retourne toutes celles sur lesquelles un serveur web tourne
  
    // Cette boucle va faire toutes les adresses du bloc 10.0.0.x
    // La série des 10.0.0.x est juste un exemple car ces IPs sont normalement
    // des adresses d'intranet: je fais juste en sorte que vous n'embêtiez pas mon FAI :-)
    for($i=1; $i < 256; $i++)
    {
       // $path est la variable qui va contenir l'URL testée.
       $path = "http://10.0.0.".$i;
  
       // Ouvre la socket sur le serveur PAI, port 80.
       $fp = fsockopen("pai", 80, &$errno, &$errstr);
  
       // Envoie la requête HTTP qui retourne l'info que nous voulons.
       fputs($fp,"GET $path HTTP/1.0\n\n");
       set_socket_blocking($fp, false);
  
       // C'est la chaîne que nous attendons en retour à notre requête HTTP.
       $str2 = "HTTP/1.0 200 OK";
  
       // Laisse au programme 2 secondes pour essayer de se connecter au serveur.
       Sleep(2);
  
       // Capture la ligne de la requête HTTP.
       $line = fgets($fp, 16);
       // Si str2 contient la même ligne, il y a correspondance auquel cas un serveur
       // web est en train de tourner. On continue alors pour avoir le nom du serveur
       // et un lien vers celui-ci.
       if (strcmp($line, $str2) == 0)
            echo "<A HREF=".$path.">".gethostbyaddr($pathhost)."</a><br>\n";
       fclose($fp);
    }
?>

Une remarque importante : ce procédé est très simple mais inefficace dans la mesure où l'on attend au maximum 2 secondes pour chaque IP. Dès lors, n'abusez pas de ce script car vous récupèreriez probablement une opération de dépassement de temps maximum (time out) de votre serveur web ou bien vous resteriez bloqué en attente un bon moment le temps que les itérations se fassent.

Cela dit, c'est un bon exemple de ce que vous pouvez faire comme simple utilisateur avec php3.

Le mois prochain, j'écrirai encore un autre exemple de programme php3. Cette fois, je vous montrerai comment créer votre propre livre d'or en utilisant php3 et mySQL.

Copyright 1999, Anderson Silva. Paru dans le numéro 49 de la Linux Gazette de Janvier 2000.

Traduction française de Carine Bournez.


Page suivante   Page précédente   Table des matières