Checksums et ipv4

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 373 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.