Partage
  • Partager sur Facebook
  • Partager sur Twitter

Génération d'adresses IP

Sujet résolu
    15 mars 2013 à 19:21:42

    Bonjour à tous,

    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 :

    "3.103.8.38","4.17.142.255","57083942","68259583","US","United States"
    "4.17.143.0","4.17.143.15","68259584","68259599","CA","Canada"
    "4.17.143.16","4.18.32.71","68259600","68296775","US","United States"
    "4.18.32.72","4.18.32.79","68296776","68296783","MX","Mexico"
    "4.18.32.80","4.18.40.135","68296784","68298887","US","United States"
    "4.18.40.136","4.18.40.143","68298888","68298895","CA","Canada"


    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.

    Je suis prêt à offrir une bière :p

    • Partager sur Facebook
    • Partager sur Twitter
      15 mars 2013 à 19:31:40

      en incrémentant de 1, non ?
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        15 mars 2013 à 21:59:01

        3.103.8.38 est suivit de 3.103.8.39
        Jusqu'a 3.103.8.255 qui est suivi de 3.103.9.0 et ainsi de suite jusqu'à 4.17.142.255

        • Partager sur Facebook
        • Partager sur Twitter

        🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

          15 mars 2013 à 23:38:26

          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 :)
          • Partager sur Facebook
          • Partager sur Twitter
            15 mars 2013 à 23:40:19

            c'est juste une histoire de conversion de format.

            même pas en fait, la conversion est déjà faite dans le texte ...

            reste juste à incrémenter et à convertir en adresse ip.

            -
            Edité par josmiley 16 mars 2013 à 0:12:07

            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              16 mars 2013 à 1:50:19

              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.

              -
              Edité par nohar 16 mars 2013 à 2:31:04

              • Partager sur Facebook
              • Partager sur Twitter
              Zeste de Savoir, le site qui en a dans le citron !
                16 mars 2013 à 11:18:25

                Nohar à raison ... Que cherches-tu à faire au juste ?
                • Partager sur Facebook
                • Partager sur Twitter

                🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                  16 mars 2013 à 11:48:25

                  Ce que je cherche à faire est générer les adreses IP qui font partie de cette range : 3.103.8.38 -> 4.17.142.255

                  Il n'y a donc absolument pas 4 294 967 296 valeurs à générer

                  -
                  Edité par N0Crash 16 mars 2013 à 11:51:01

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 mars 2013 à 12:02:35

                    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 :

                    f(3.103.8.38) = 3 * 256^3 + 103 * 256^2 + 8 * 256 + 38 = 0x03 * 0x1000000 + 0x67 * 0x10000 + 0x08 * 0x100 + 0x26 = 0x03670826.

                    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".

                    -
                    Edité par Dentuk 16 mars 2013 à 12:11:31

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 mars 2013 à 12:36:42

                      N0Crash a écrit:

                      Ce que je cherche à faire est générer les adreses IP qui font partie de cette range : 3.103.8.38 -> 4.17.142.255

                      Tu n'as pas compris mon post. Ma question, c'était : pour en faire quoi ?

                      -
                      Edité par nohar 16 mars 2013 à 12:37:05

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Zeste de Savoir, le site qui en a dans le citron !

                      Génération d'adresses IP

                      × 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.
                      • Editeur
                      • Markdown