Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trouver son adresse IP locale

sous Linux (Debian)

Sujet résolu
    25 décembre 2010 à 19:52:09

    Bonsoir à tous,
    Je cherche à trouver l'adresse IP locale (se présentant sous la forme 192.168.X.X) de mon ordinateur sous Linux.
    J'ai donc essayé ce code :
    >>> from socket import *
    >>> gethostbyname(gethostname())
    '127.0.1.1'

    Cependant comme vous pouvez le constater je n'obtiens pas le résultat escompté... Ce code fonctionne parfaitement sous Windows pourtant.
    En utilisant la commande shell ifconfig j'ai pu déterminer l'adresse IP, alors je ne comprends pas pourquoi je ne peux pas y accéder directement en Python.
    Existerait-il un autre moyen de la trouver svp (j'ai déjà essayé avec gethostbyname_ex) ?
    Merci d'avance et bonnes fêtes,
    snake_48
    • Partager sur Facebook
    • Partager sur Twitter
      25 décembre 2010 à 20:39:31

      Salut

      Chez moi ce code fonctionne bien :
      from socket import gethostbyname_ex, gethostname
      
      ip = gethostbyname_ex(gethostname())[2][0]
      


      Explications :

      gethostbyname_ex(gethostname()) renvoit ça : (hostname, aliaslist, ipaddrlist) le premier élément du triplet est le nom d'hôte, le second est une liste d'alias de domaine, enfin le 3ème élément est une liste d'adresses IP correspondant à ce nom d'hôte.
      Chez moi, j'ai ça :
      ['192.168.1.128','127.0.0.1']
      Sachant que seule ma carte wifi assure une liaison en réseau local. Si je branchais mon PC en wifi et en éthernet j'aurais bien sur deux adresses locales.

      Dans ce cas, on peut adapter le code précédent pour avoir une listes d'IP locales correspondant à la machine et différentes de '127.0.0.1' :
      from socket import gethostbyname_ex, gethostname
      
      ips = gethostbyname_ex(gethostname())[2].remove('127.0.0.1')
      


      Bonne soirée :)
      • Partager sur Facebook
      • Partager sur Twitter
        25 décembre 2010 à 22:06:48

        Justement la fonction ne me renvoie que ['127.0.1.1'] :( .
        Merci quand même, je trouve ça bizarre...
        • Partager sur Facebook
        • Partager sur Twitter
          25 décembre 2010 à 22:14:39

          Salut

          Pourrais-tu donner la sortie des commandes suivantes stp ?

          ifconfig -a
          uname -a

          ++
          • Partager sur Facebook
          • Partager sur Twitter
            25 décembre 2010 à 23:36:48

            Essaye print gethostbyname_ex(gethostname()) et dis nous ce que ça t'affiche.
            • Partager sur Facebook
            • Partager sur Twitter
              26 décembre 2010 à 16:48:08

              EOF > En faisant ifconfig je tombe bien sur mon adresse locale comme précisé dans le premier post (par la même occasion il me dit que localhost c'est 127.0.0.1 alors que je trouve 127.0.1.1 avec Python).
              Et avec uname j'obtiens :
              Linux debian 2.6.26-2-686 #1 SMP Mon Jun 21 05:58:44 UTC 2010 i686 GNU/Linux.
              darkrojo > Jutement c'est avec gethostbyname_ex(gethostname()) que j'obtiens ['debian',[],['127.0.1.1']].

              Edit : J'ai trouvé une solution après maintes et maintes recherches :
              from socket import *
              from struct import *
              from fcntl import *
              
              
              
              def get_my_ip():
              	sock=socket(AF_INET,SOCK_DGRAM)
              	return inet_ntoa(ioctl(sock.fileno(),0x8915,pack("256s","wlan0"))[20:24])
              
              • Partager sur Facebook
              • Partager sur Twitter
                26 décembre 2010 à 17:31:45

                Salut

                Ton code est-il destiné à être utilisable sur toutes les machines ? Dans ce cas, que se passerait-il si :
                • L'utilisateur ne dispose pas de l'interface "wlan0"
                • Plusieurs interfaces fournissent des IP locales différentes
                • L'interface qui fournit l'IP est "eth0" "eth1" "wlan1" ou autres ?
                • Partager sur Facebook
                • Partager sur Twitter
                  26 décembre 2010 à 18:18:30

                  Oui j'y ai pensé, mais l'application est conçue pour fonctionner uniquement sur mon ordinateur ;) . Ceci dit j'aurais préféré passer par les fonctions gethostbyname et gethostname, mais je fais avec ce qui fonctionne ^^ ...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Trouver son adresse IP locale

                  × 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