web-dev-qa-db-fra.com

Comment puis-je obtenir l'adresse IP publique en utilisant python2.7?

Comment puis-je obtenir l'adresse IP publique en utilisant python2.7? IP non privée.

43
Searene

Actuellement, il y a plusieurs options:

  • ip.42.pl
  • jsonip.com
  • httpbin.org
  • ipify.org

Vous trouverez ci-dessous des façons exactes d'utiliser chacune de ces solutions.

ip.42.pl

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.

jsonip.com

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.

httpbin.org

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.

ipify.org

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 .

101
Tadeck

J'aime le paquet de demandes avec http://ip.42.pl/raw

import requests
requests.get('http://ip.42.pl/raw').text
11
HyperActive

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'])
2
Xavi Martínez

Vous pouvez simplement faire ceci: 

import requests
print requests.get("http://ipecho.net/plain?").text

Produit: 

XX.XX.XXX.XXX
1
Isaac Chabot

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"]
0
PascalVKooten

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'
0
NOP da CALL