Checksums et ipv4

Contenu du snippet

Voici deux fonctions très simples :
- ip2checksum(): calcule la checksum d'une IP
- checksum2ip(): restrouve l'IP à partir de la checksum

Source / Exemple :


function ip_checksum($ip)
{
    // Récupère les 4 segments de l'IP
    $seg = explode('.', $ip);

    // Calcule la checksum
    $ret = 0;
    $ret += ( $seg[0] * pow(256, 3) ) ;
    $ret += ( $seg[1] * pow(256, 2) ) ;
    $ret += ( $seg[2] * pow(256, 1) ) ;
    $ret += ( $seg[3] * pow(256, 0) ) ;

    return $ret;
}

function checksum2ip($checksum)
{
    // Vérifie qu'il s'agit bien d'une chaine de chiffres
    if(!ereg('^:digit:+$', $checksum))
        return false;

    $seq = array();

    // Convertit la chaine en hexadecimal
    $checksum = base_convert($checksum, 10, 16);

    // Vérifie que la checksum pourra bien etre resituée en IP
    if(strlen($checksum) != 8)
        return false; 

    // Récupération des segments puis reconvertion en décimal
    $seq[] = base_convert(substr($checksum, 0, 2), 16, 10);
    $seq[] = base_convert(substr($checksum, 2, 2), 16, 10);
    $seq[] = base_convert(substr($checksum, 4, 2), 16, 10);
    $seq[] = base_convert(substr($checksum, 6, 2), 16, 10);

    // Formattage de l'IPv4	
    return printf('%s.%s.%s.%s', $seq[0], $seq[1], $seq[2], $seq[3]);
}

Conclusion :


Rien de bien compliqué.
Je ne prends pas la peine de commenter le code parfaitement.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.