Calcul des masques de sous réseaux

Calcul des masques de sous réseaux

1 – Calcul du masque en ligne

Saisie de l'IP :

Saisie du masque :

2 – Fonction de calcul de masque de sous réseaux

Cette outil vous permettra de calculer, en fonction du masque de sous réseaux de votre choix, la plage IP disponible. L’outil vous indiquera en plus, la première adresse disponible ainsi que la dernière.

3 – Suivi du développement

3.1 – Problème restant

3.2 – RoadMap

  • Saisir l’adresse de début et de fin et calculer le masque.

3.3 – Suivi du projet

  • V1.2
    Optimisation du code par Pascal de Serveurperso.com en remplaçant le case par une seule ligne.
  • V1.1
    Addition d’une adresse IP à une constante grâce à la méthode suivante : Conversion de l’IP (chaîne) en inetaddr grâce à la commande ip2long(), puis addition de +1 par exemple et retour à la chaîne avec la fonction inverse long2ip().
    Traitement des cas particulier /31 et 32 pour faire apparaître les bon résultat (N/A par exemple).
  • V1.0
    Création du formulaire de saisie.
    Création du script basé sur le squelette whois.php.
    Calcul du nombre d’host grâce à $calcul_host=pow(2,32-$calcul_mask)-2; signifiant 2 Exposant (32-masque), le tout -2 car on retire le réseau et le broadcast.
    Vérification des champ de saisie.

4 – Code source

<?PHP

// ********************************************
// Affichage de l'entete html
// ********************************************
echo
    '
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <LINK REL="StyleSheet" HREF="../style.css" TYPE="text/css">
    <title>FrameIP, Pour ceux qui aiment IP - Script Masque</title>
    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <META NAME="AUTHOR" CONTENT="www.frameip.com">
    <META NAME="COPYRIGHT" CONTENT="Copyright (c) 2003 by framip">
    <META NAME="KEYWORDS" CONTENT="masque, ip, classe, A, B, C, D, E, 255, 0, 128, bits, binaire, routeur, wan, reseaux, lan, comaraison, adresse, segment, convertion, hote, passerelle, route, calcul, sousreseau">
    <META NAME="DESCRIPTION" CONTENT="Frameip, pour ceux qui aiment IP - Script Masque">
    <META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
    <META NAME="REVISIT-AFTER" CONTENT="1 DAYS">
    <META NAME="RATING" CONTENT="GENERAL">
    <META NAME="GENERATOR" CONTENT="powered by frameip.com - webmaster@frameip.com">
    </head>
    <body>
    ';

// ********************************************
// Initiation des variables
// ********************************************
$calcul_adresse_ip=$_POST['IP'];
$calcul_mask=$_POST['MASK'];

// **********************************************
// Récupération de la date et heure
// **********************************************
$annee=date("Y");
$mois=date("m");
$jour=date("d");
$heure=date("H");
$minute=date("i");
$seconde=date("s");

// **********************************************
// Récupération de l'IP cliente
// **********************************************
$ip_client=getenv("REMOTE_ADDR");

// **********************************************
// Récupération du Ptr de l'IP cliente
// **********************************************
$ptr=gethostbyaddr("$ip_client");
if ($ptr==$ip_client)
$ptr="Pas de ptr";

// **********************************************
// Récupération du port TCP source
// **********************************************
$port_source=getenv("REMOTE_PORT");

// **********************************************
// Récupération de l'IP du browser
// **********************************************
$ip_browser=getenv("HTTP_X_FORWARDED_FOR");

// ********************************************
// Validation du champs IP
// ********************************************
$calcul_inetaddr=ip2long($calcul_adresse_ip);
$calcul_adresse_ip=long2ip($calcul_inetaddr);

// ********************************************
// Vérification de la saisie
// ********************************************
$erreur=0; // Initialisation
if (($calcul_inetaddr==0)||($calcul_inetaddr==-1))
    masque_erreur(1);
if (($calcul_mask<1)||($calcul_mask>32))
    masque_erreur(2);

// ********************************************
// Conversion du masque
// ********************************************
// Optimisation fournit par Pascal de Serveurperso.com
$calcul_chaine_mask = (string) long2ip(256*256*256*256 - pow(2, 32 - $calcul_mask)); 

// ********************************************
// Calcul du nombre de HOST
// ********************************************
if ($calcul_mask==32)
    $calcul_host=1;
else
    $calcul_host=pow(2,32-$calcul_mask)-2;

// ********************************************
// Calcul de la route
// ********************************************
$calcul_route=$calcul_inetaddr&ip2long($calcul_chaine_mask); // Ajoute l'IP et le masque en binaire
$calcul_route=long2ip($calcul_route); // Convertit l'adresse inetaddr en IP

// ********************************************
// Calcul de la premiere adresse
// ********************************************
if ($calcul_mask==32)
    $offset=0;
else
    $offset=1;

if ($calcul_mask==31)
    $calcul_premiere_ip="N/A";
else
    {
    $calcul_premiere_ip=ip2long($calcul_route)+$offset;
    $calcul_premiere_ip=long2ip($calcul_premiere_ip);
    }

// ********************************************
// Calcul de la dernière adresse
// ********************************************
if ($calcul_mask==32)
    $offset=-1;
else
    $offset=0;

if ($calcul_mask==31)
    $calcul_derniere_ip="N/A";
else
    {
    $calcul_derniere_ip=ip2long($calcul_route)+$calcul_host+$offset;
    $calcul_derniere_ip=long2ip($calcul_derniere_ip);
    }

// ********************************************
// Calcul du broadcast
// ********************************************
if ($calcul_mask==32)
    $offset=0;
else
    $offset=1;
$calcul_broadcast=ip2long($calcul_route)+$calcul_host+$offset;
$calcul_broadcast=long2ip($calcul_broadcast);

// ********************************************
// Présentation des résultats
// ********************************************
echo '
    <p align="center">
        <font size="4" color="#008000">
            <b>
                Masque de sous réseaux
            </b>
        </font>
    </p>
    ';

echo '
    <table border="0" width="100%" id="table1">
        <tr>
            <td width="50%" align="right"><b>Les saisies</b></td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td width="50%" align="right">Adresse IP :</td>
            <td>'.$calcul_adresse_ip.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">Masque de sous réseau :</td>
            <td>'.$calcul_mask.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td width="50%" align="right"><b>Les résultats</b></td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td width="50%" align="right">Masque de sous réseau :</td>
            <td>'.$calcul_chaine_mask.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">Nombre maximum d\'hôte :</td>
            <td>'.$calcul_host.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">L\'adresse de réseau (La route) :</td>
            <td>'.$calcul_route.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">Première adresse d\'hôte :</td>
            <td>'.$calcul_premiere_ip.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">Dernière adresse d\'hôte :</td>
            <td>'.$calcul_derniere_ip.'</td>
        </tr>
        <tr>
            <td width="50%" align="right">Adresse de broadcast :</td>
            <td>'.$calcul_broadcast.'</td>
        </tr>
    </table>
    ';

// ********************************************
// Fin du script général
// ********************************************
fin_du_script();

// ********************************************
// Fonction d'affichage de l'erreur de saisie
// ********************************************
function masque_erreur($erreur) // $erreur représente le numéro d'erreur.
    {
    // ********************************************
    // Affichage de titre d'erreur
    // ********************************************
    echo
        '
        <p align="center">
            <b>
                <font size="5" color="#008000">
                    Erreur
                </font>
            </b>
        </p>
    ';
    echo "<BR>";

    // ********************************************
    // Message personnalisé
    // ********************************************
    switch ($erreur)
        {
        case 1:
            echo'Le calcul ne peux pas avoir lieu car le champ IP est vide ou non valide.';
        break;
        case 2:
            echo'Le calcul ne peux pas avoir lieu car le champ MASK est vide ou non valide.';
        break;
        }

    // ********************************************
    // Fin du script général
    // ********************************************
    fin_du_script();
    }

function fin_du_script()
    {
    // ********************************************
    // Affiche de l'Url
    // ********************************************
    echo '
        <p align="right">
            <a href="http://www.frameip.com">
                www.frameip.com
            </a>
        </p>
        ';

    // ********************************************
    // Fin de la page Html
    // ********************************************
    echo
        '
        </body>

        </html>
        ';

    // ********************************************
    // Fin du script général
    // ********************************************
    exit(0);
    }

?>

5 – Suivi du document

Création et suivi de la documentation par _SebF

6 – Discussion autour du calcul des masques de sous réseaux

Vous pouvez poser toutes vos questions, faire part de vos remarques et partager vos expériences à propos du calcul des masques de sous réseaux. Pour cela, n’hésitez pas à laisser un commentaire ci-dessous :

Commentaire et discussion

1 commentaire sur la page : “Calcul des masques de sous réseaux”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *