Scanner une plage d'adresses ip - PHP

De UnixManiax
Aller à la navigation Aller à la recherche


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>";
?>