161 votes

Obtenir l'adresse IP externe d'une machine avec Python

Vous cherchez un meilleur moyen d'obtenir le numéro IP externe actuel d'une machine... La méthode ci-dessous fonctionne, mais je préférerais ne pas dépendre d'un site externe pour obtenir l'information... Je suis limité à l'utilisation des bibliothèques Python 2.5.1 standard fournies avec Mac OS X 10.5.x.

import os
import urllib2

def check_in():

    fqn = os.uname()[1]
    ext_ip = urllib2.urlopen('http://whatismyip.org').read()
    print ("Asset: %s " % fqn, "Checking in from IP#: %s " % ext_ip)

0 votes

3voto

Nikita Rovda Points 21
import requests
import re

def getMyExtIp():
    try:
        res = requests.get("http://whatismyip.org")
        myIp = re.compile('(\d{1,3}\.){3}\d{1,3}').search(res.text).group()
        if myIp != "":
            return myIp
    except:
        pass
    return "n/a"

2voto

Sreevisakh Points 345

Ce morceau de code python le fera.

import urllib
import re
f = urllib.urlopen("http://www.canyouseeme.org/")
html_doc = f.read()
f.close()
m = re.search('(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)',html_doc)
print m.group(0)

2voto

Christian Jensen Points 135

J'ai essayé la plupart des autres réponses à cette question ici et je me suis rendu compte que la plupart des services utilisés étaient défunts, sauf un.

Voici un script qui devrait faire l'affaire et ne télécharger qu'une quantité minimale d'informations :

#!/usr/bin/env python

import urllib
import re

def get_external_ip():
    site = urllib.urlopen("http://checkip.dyndns.org/").read()
    grab = re.findall('([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', site)
    address = grab[0]
    return address

if __name__ == '__main__':
  print( get_external_ip() )

2voto

timgeb Points 5966

La solution la plus simple (sans python) à laquelle je pense est la suivante

wget -q -O- icanhazip.com

J'aimerais ajouter une solution Python3 très courte qui utilise l'API JSON de http://hostip.info .

from urllib.request import urlopen
import json
url = 'http://api.hostip.info/get_json.php'
info = json.loads(urlopen(url).read().decode('utf-8'))
print(info['ip'])

Vous pouvez bien sûr ajouter un contrôle d'erreur, un délai d'attente et d'autres fonctionnalités :

#!/usr/bin/env python3
from urllib.request import urlopen
from urllib.error import URLError
import json

try:
    url = 'http://api.hostip.info/get_json.php'
    info = json.loads(urlopen(url, timeout = 15).read().decode('utf-8'))
    print(info['ip'])
except URLError as e:
    print(e.reason, end=' ') # e.g. 'timed out'
    print('(are you connected to the internet?)')
except KeyboardInterrupt:
    pass

2voto

user3526918 Points 591

Travailler avec Python 2.7 .6 et 2.7.13

import urllib2  
req = urllib2.Request('http://icanhazip.com', data=None)  
response = urllib2.urlopen(req, timeout=5)  
print(response.read())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X