¿Cómo puedo obtener la IP pública usando python2.7? IP no privada.
Actualmente hay varias opciones:
A continuación se muestran formas exactas en que puede utilizar cada uno de los anteriores.
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í.
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.
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.
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