Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Manipulation des adresses IP


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Manipulation des adresses IP
    Bonjour,
    Les adresses IPs sont stockées en hexa sur la base postgreSQL si je veux faire une recherche sur une ardresse IP comment procéder la conversion IP décimale en hexa.
    Merci

  2. #2
    Rédacteur

    Une adresse IP est juste un entier 32 bits non signé. le convertir en hexadécimal est donc ultra simple !

    A +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre à l'essai
    Bonjour,
    Merci de votre réponse. J'ai effectué le test suivant qui renvoie bien de l'hexa
    # select to_hex(10);
    to_hex
    --------
    a
    (1 row)
    Comment procède t'on pour une adresse IP?

    # select to_hex(192.168.1.1);
    ERROR: syntax error at or near ".1"
    LINE 1: select to_hex(192.168.1.1);

    Il semble que le "." ne fonctionne pas en séparateur, ni l'espace ou la virgule.
    Cdt.

  4. #4
    Expert éminent
    Bonjour,
    Il faut convertir chaque octet en hexa, puis "concaténer" le tout:
    192 => C0
    168 => A8
    1 => 01
    Donc 192.168.1.1, ça donne en hexa C0A80101.
    Tu peux aussi commencer par trouver l'écriture décimale de l'adresse (ici (192*256^3) + (168*256^2) + (1 * 256) + (1) = 3232235777), et la convertir en hexa.

    Tatayo.

  5. #5
    Membre à l'essai
    Bonjour,
    Merci du retour très rapide. Faire des conversions une à une de chaque octet me parait fastidieux.
    Je pense qu'une fonction à été prévue à cet effet je vais continuer à chercher.
    Merci.

  6. #6
    Membre actif
    Citation Envoyé par yartempion Voir le message
    Bonjour,
    Merci du retour très rapide. Faire des conversions une à une de chaque octet me parait fastidieux.
    Je pense qu'une fonction à été prévue à cet effet je vais continuer à chercher.
    Merci.
    Fonction ip2hex

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE FUNCTION ip2hex( ip char(15) )
    returns char(15) IMMUTABLE 
    LANGUAGE 'plpgsql'
    AS $BODY$
    DECLARE a integer[];
    DECLARE b bigint;
     
    BEGIN 
        a = string_to_array(ip, '.');
        b = a[1]*256^3 + a[2]*256^2 + a[3]*256 + a[4];
     
        return UPPER(to_hex(b));
    END;
    $BODY$;



    Test
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT ip2hex( '192.168.1.1' );

  7. #7
    Membre à l'essai
    Merci
    Merci pour la fonction. Je vais essayer de m'en servir. Je ne suis pas parvenue à trouver mieux.
    Bien cordialement

###raw>template_hook.ano_emploi###