Checksums et ipv4

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 172 fois - Téléchargée 27 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

Messages postés
399
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
6 septembre 2004

çà m'est très utile en tt cas ! merci
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
15 septembre 2005

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 :)
Messages postés
60
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
7 novembre 2004

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.