Comment puis-je obtenir l'adresse IP publique en utilisant python2.7? IP non privée.
Actuellement, il y a plusieurs options:
Vous trouverez ci-dessous des façons exactes d'utiliser chacune de ces solutions.
from urllib2 import urlopen
my_ip = urlopen('http://ip.42.pl/raw').read()
C'est la première option que j'ai trouvée. C'est très pratique pour les scripts, vous n'avez pas besoin d'analyser JSON ici.
from json import load
from urllib2 import urlopen
my_ip = load(urlopen('http://jsonip.com'))['ip']
Apparemment, le seul but de ce domaine est de renvoyer une adresse IP en JSON.
from json import load
from urllib2 import urlopen
my_ip = load(urlopen('http://httpbin.org/ip'))['Origin']
httpbin.org est un service que je recommande souvent aux développeurs débutants d’utiliser pour tester leurs scripts/applications.
from json import load
from urllib2 import urlopen
my_ip = load(urlopen('https://api.ipify.org/?format=json'))['ip']
La puissance de ce service résulte de l’absence de limites (il n’ya pas de limitation de débit), d’infrastructures (placées sur Heroku, avec une haute disponibilité à l’esprit) et de flexibilité (fonctionne à la fois pour IPv4 et IPv6).
EDIT: Ajouté httpbin.org à la liste des options disponibles.
EDIT: Ajouté ipify.org grâce à la note de kert .
J'aime le paquet de demandes avec http://ip.42.pl/raw
import requests
requests.get('http://ip.42.pl/raw').text
Essaye ça:
import ipgetter
import requests
IP = ipgetter.myip()
url = 'http://freegeoip.net/json/'+IP
r = requests.get(url)
js = r.json()
print 'IP Adress: ' + js['ip']
print 'Country Code: ' + js['country_code']
print 'Country Name: ' + js['country_name']
print 'Region Code: ' + js['region_code']
print 'Region Name: ' + js['region_name']
print 'City Name: ' + js['city']
print 'Zip code: ' + js['Zip_code']
print 'Time Zone: ' + js['time_zone']
print 'Latitude: ' + str(js['latitude'])
print 'Longitude: ' + str(js['longitude'])
Vous pouvez simplement faire ceci:
import requests
print requests.get("http://ipecho.net/plain?").text
Produit:
XX.XX.XXX.XXX
C’est un moyen de ne pas avoir à faire appel à Internet:
Faites-moi savoir si cela ne fonctionne pas, alors je peux mettre à jour la réponse (cela fonctionne pour ~ 10 serveurs du mien)
from subprocess import check_output
out = check_output("/sbin/ifconfig | awk '/inet / { print $2 }' | sed 's/addr://'", Shell=True)
[x for x in out.decode().split() if not x == "127.0.0.1" and
not (x.startswith("172") and x.endswith("0.1"))]
["x.x.x.x.x"]
Getip est un petit module qui renvoie l'adresse IP publique d'un serveur aléatoire.
Installer:
~ $ pip install getip2
Utilisation:
>> import getip
>> ip = getip.get()
>>
>> ip
'66.249.76.109'