Scanner une plage d'adresses ip - PHP

De UnixManiax
Aller à la navigation Aller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.


Principe

Voici une page php qui scanne une plage d'adresses ip avec deux boucles "for", en utilisant les outils ping, sed, grep, nslookup et nmap présents sur le système d'exploitation du serveur (un unix donc).

Ce script va faire un ping sur toutes les adresses ip des réseaux 10.36.208.2 à 10.36.210.254, avec une liste d'exclusion. Le résultat du ping sera affiché dans un tableau avec un message "ping ok" sur fond vert quand c'est ok, et un message "Server seems down !!" sur fond rouge quand le ping ne passe pas. Il y a également une colonne avec le nom DNS correspondant à d'adresse ip.

Ce script a été testé sur Mandriva 2008.1 et FreeBSD 7.0.


Le code

<?php
echo "<HTML><BODY>";

$exclude_list = array ("10.36.208.2", "10.36.208.3", "10.36.208.4");
echo '<table border=1 style="font-size: 10pt">';
echo '<tr><td>ip</td><td>nom</td><td>état</td></tr>';
for ($RESEAU = 208; $RESEAU <= 210; $RESEAU=$RESEAU+1)
{
    for ($IP = 2; $IP < 255; $IP = $IP+1)
    {
        if (!in_array("10.36.".$RESEAU.".".$IP, $exclude_list))
        {
            echo "<tr>";
            echo "<td>10.36.$RESEAU.$IP</td>";
            echo "<td>";
            system('nslookup 10.36.'.$RESEAU.'.'.$IP.'|grep name|sed "s/.*name = //g"|sed "s/.tlt.*//g"');
            echo " </td>";
            echo "<td>";
            system('if [ `nmap -T4 -p22,23 10.36.'.$RESEAU.'.'.$IP.' | grep "Interesting ports on" | wc -l` -eq 1 ]; then echo "<span style="background-color:#00ff00">Ping ok</span>"; else echo "<span style="background-color:#ff0000">Server seems down  !!</span>"; fi');
            echo "</td>";
            echo "</tr>";
        }
    }
}
echo "</table>";

echo "</BODY></HTML>";
?>