Checksums et ipv4

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 526 fois - Téléchargée 29 fois

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

Ajouter un commentaire Commentaires
matrey Messages postés 399 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 6 septembre 2004
21 juin 2004 à 10:23
çà m'est très utile en tt cas ! merci
Isoth0p Messages postés 42 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 15 septembre 2005
18 juin 2004 à 12:21
Bah ... dans le IP header, pour les raw sockets par exemple, la checksum de l'IP doit etre founie. De plus il est assez courant de tomber sur des checksums d'IP dans un réseau, et ce script est donc une petite astuce pour la résoudre :)
Mechanicman Messages postés 60 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 7 novembre 2004
17 juin 2004 à 20:00
cool...par contre je vois le but...peut tu m'éclairer? Ce serait bien qu'il supporte IPv6...

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.