Pour un projet à mon école, il m'est nécessaire de générer un ensemble d'adresse IP en fonction d'un pays donnée. Pour la correspondance IP/Pays, j'utilise la base de données GeoIP Maxmind, en voici un exemple :
La première ligne est un EXCELLENT exemple de mon problème. Auriez-vous une idée de comment serait-il possible de générer la totalité des adresses IP dans la range "3.103.8.38" : "4.17.142.255" sans insérer des adresses n'y appartenant pas ?
Pour les autres lignes, le problème me parait assez simple mais la, je sèche complètement.
Donc pour vous, le plus simple est de faire des boucles for ? J'ai un peu du mal à voir les conditions d'arrêt pour bien avoir les adresses de la range. Un petit exemple serait super
Tu te rends compte que sachant qu'une IP (v4) est une donnée qui tient sur 32 bits et que tu t'apprêtes visiblement à générer TOUTES les valeurs du range, soit 2^32 = 4 294 967 296 valeurs de 4 octets dans le pire des cas, ton programme peut théoriquement bouffer plus de 17 Gio de RAM et/ou prendre la vie à s'exécuter ?
Je ne sais pas ce que tu cherches à faire exactement au final, mais une chose est certaine : tu es sur une mauvaise piste.
La bonne représentation pour les calculs sur les IP c'est les nombres en base 256, lesquels se représentent facilement en hexadécimal car 256 = 16 * 16. Cela revient à associer un octet à chaque composante de l'IP et à faire des calculs sur des entiers de 4 octets (pour IPv4).
Ainsi tu peux faire correspondre l'IP 3.103.8.38 au nombre entier suivant :
Réciproquement si tu prends un nombre compris entre 0 et 0xFFFFFFFF tu peux lui faire correspondre une unique adresse IP en le coupant en quatre.
C'est d'ailleurs la meilleure façon de représenter une IP en mémoire plutôt que d'utiliser une chaîne de caractères qui prendra plus de place et sur laquelle tu ne sauras pas faire simplement des opérations.
L'appartenance d'une IP à une plage [IP1, IP2] équivaut alors à f(IP1) ≤ f(IP) ≤ f(IP2), donc en pratique si tu représentes directement les IP par le nombre à 4 octets correspondant f(IP) dans ton programme tu peux utiliser les opérations prédéfinies sur les entiers pour jouer sur tes IP. De même si tu veux générer toutes les IP de la plage tu peux incrémenter par pas de 1 de la première à la dernière, si tu es sûr que c'est ce que tu veux.
Edit : mise en forme.
Edit 2 : Le format de ton fichier, comme l'a dit josmiley, est avec mes notations : "IP1","IP2","f(IP1)","f(IP2)","code","pays".
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Python c'est bon, mangez-en.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.