¿Cómo puedo obtener la IP pública usando python2.7?

¿Cómo puedo obtener la IP pública usando python2.7? IP no privada.

Actualmente hay varias opciones:

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

A continuación se muestran formas exactas en que puede utilizar cada uno de los anteriores.

ip.42.pl

from urllib2 import urlopen my_ip = urlopen('http://ip.42.pl/raw').read() 

Esta es la primera opción que he encontrado. Es muy conveniente para los scripts, no necesita el análisis JSON aquí.

jsonip.com

 from json import load from urllib2 import urlopen my_ip = load(urlopen('http://jsonip.com'))['ip'] 

Al parecer, el único propósito de este dominio es devolver la dirección IP en JSON.

httpbin.org

 from json import load from urllib2 import urlopen my_ip = load(urlopen('http://httpbin.org/ip'))['origin'] 

httpbin.org es un servicio que a menudo recomiendo a los desarrolladores junior que utilicen para probar sus scripts / aplicaciones.

ipify.org

 from json import load from urllib2 import urlopen my_ip = load(urlopen('https://api.ipify.org/?format=json'))['ip'] 

La potencia de este servicio se debe a la falta de límites (no hay limitación de velocidad), infraestructura (colocada en Heroku, con alta disponibilidad en mente) y flexibilidad (funciona tanto para IPv4 como para IPv6).

EDITAR : Se agregó httpbin.org a la lista de opciones disponibles.

EDITAR : Agregado ipify.org gracias a la nota de kert .

Me gusta el paquete de solicitudes con http://ip.42.pl/raw

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

Prueba esto:

 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']) 

Solo puedes hacer esto:

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

Produce:

 XX.XX.XXX.XXX 

Getip es un pequeño módulo que devuelve una dirección IP pública de un servidor aleatorio.

Instalar:

~ $ pip install getip2

Utilizar:

 >> import getip >> ip = getip.get() >> >> ip '66.249.76.109' 

Esta es una forma de no tener que hacer una llamada a internet:

Déjeme saber si esto no funciona, entonces puedo actualizar la respuesta (funciona para ~ 10 servidores míos)

 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"))] ["xxxxx"] 

Con módulo de peticiones

 import requests public_IP = requests.get("https://www.wikipedia.org").headers["X-Client-IP"] print public_IP