Comment afficher l'adresse IP locale en utilisant stdlib de Python

Comment puis-je trouver des adresses IP locales (c.-à-d. 192.168.x.x ou 10.0.x.x) avec Python en utilisant une bibliothèque standard ?

Je viens de trouver ceci mais cela semble un peu compliqué, cependant ils disent de l’essayer sur Linux et je l’ai fait sur Windows et cela a fonctionné.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
s.close()

Cela suppose que vous ayez un accès à Internet et qu’il n’y ait pas de proxy local.

Essayer le morceau de code suivant pour afficher l’adresse IP locale de votre machine en utilisant Python.

import socket
socket.gethostbyname(socket.gethostname())

Cette méthode renvoie l’adresse IP locale de votre machine, et fonctionne sur Python 3 ou 2:

    import socket
    def get_ip():
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.settimeout(0)
        try:
            # n a même pas besoin d'être joignable
            s.connect(('10.254.254.254', 1))
            IP = s.getsockname()[0]
        except Exception:
            IP = '127.0.0.1'
        finally:
            s.close()
        return IP
    print(get_ip())

Si vous êtes derrière un pare-feu NAT comme votre routeur WIFI à la maison, cela n’affichera pas votre adresse IP publique, mais plutôt votre adresse IP privée sur le réseau local qui a une route par défaut vers votre routeur WIFI.

Cela fonctionnera sur la plupart des systèmes linux :

import socket, subprocess, re
def get_ipv4_add():
    p = subprocess.Popen(["ifconfig"], stdout=subprocess.PIPE)
    ifc_resp = p.communicate()
    patt = re.compile(r'inet\s*\w*\S*:\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
    resp = patt.findall(ifc_resp[0])
    print resp

get_ipv4_add()