Hello,
Dans l'admin de mon site, j'ai les IP des visiteurs en "temps réel" (actualisé toutes les 10 secondes , de mémoire).
Par curiosité, je souhaiterais indiquer à coté de chaque IP, quel est le pays du visiteur (oui si il passe par un VPN c'est faussé, masi pas grave), histoire de savoir quels pays s'y intéressent.
Je sais qu'il existe des sites qui permettent d'avoir des infos de ce genre via un API qui retourne un fichier json, seulement pour tous ceux que j’ai regardé, ils sont limités en nombre de hits/minutes pour le service gratuit. J'utilise un de ces API pour des requêtes ponctuelles, mais là avec un truc qui récupères les infos de plusieurs ip toutes les 10 seconde,s je vais me faire kicker au bout de pas longtemps lol
Je compte donc contourner la limitation en utilisant une base de données régulièrement mise à jour, par exemple celle de
software77.net.
Pour les IPv4, c'est ok, mais les IPv6, je galère pour le stockage et/ou la comparaison par rapport aux "ranges".
Pour faire la requête, j'ai ceci (simplifié) :
Code : Tout sélectionner
SELECT * FROM geotable LEFT JOIN geocountrycodes ON geocountrycodes.ctry = geotable.ctry
WHERE ipfrom <= $ipbin AND ipto >= $ipbin AND iptype = 'IPv6' "
Dans laquelle ipbin est l'IPv6 convertie en binaire.
Les valeurs ipfrom et ipto sont aussi les débuts et fins de plages IPv6 converties en binaire.
Malheureusement, cela ne fonctionne pas car pour que les valeurs binaires puissent rentrer dans la DB, la colonne est au format "Text". (Bien que pourtant ca a l'air de fonctionner avec les IPv6 converties en valeurs décimales, mais aussi stockées dans le même type de colonne).
Je ne parviens pas à stocker sous une forme numérique (apparemment, même BIG INT , la valeur max est sur 64bits). J'ai tenté de splitter la valeur binaire de l'IPv6 en 8 pour stocker dans 8 colonnes BIG INT(64), mais du coup, le CONCAT dans le WHERE ne peut pas aller car les valeurs ne sont pas systématiquement sur 8 digits. Je suis revenu en arrière.
inet6_aton, ah bah pas de pot, il faut MySQL 5.6, or j'ai sur mon "serveur" dev c'est 5.5 (oui je sais, pas dernière version mais la fois où j'ai voulu mettre plus récent ca m'a mis aussi php et apache plus récent et ca m'a planté d'autres vieux scripts

).
Du coup je me retrouve un peu à court d'idées.
Si quelqu'un a une piste, je suis preneur
Merkouin !!!
Couin