Как я могу получить публичный IP используя python2.7? - PullRequest
43 голосов
/ 28 февраля 2012

Как я могу получить публичный IP используя python2.7? Не частный IP.

Ответы [ 7 ]

105 голосов
/ 28 февраля 2012

В настоящее время есть несколько вариантов:

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

Ниже приведены точные способы использования каждого из вышеперечисленных.

ip.42.pl

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

Это первый вариант, который я нашел. Это очень удобно для скриптов, здесь вам не нужно разбирать JSON.

jsonip.com

from json import load
from urllib2 import urlopen

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

Кажется, единственная цель этого домена - вернуть IP-адрес в формате JSON.

httpbin.org

from json import load
from urllib2 import urlopen

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

httpbin.org - сервис, который я часто рекомендую начинающим разработчикам использовать для тестирования своих скриптов / приложений.

ipify.org

from json import load
from urllib2 import urlopen

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

Мощность этой услуги обусловлена ​​отсутствием ограничений (нет ограничений по скорости), инфраструктуры (размещенной на Heroku с учетом высокой доступности) и гибкостью (работает как для IPv4, так и для IPv6).

РЕДАКТИРОВАТЬ : добавлено httpbin.org в список доступных опций.

РЕДАКТИРОВАТЬ : Добавлено ipify.org благодаря заметке Керта .

13 голосов
/ 04 февраля 2017

Мне нравится пакет запросов с http://ip.42.pl/raw

import requests
requests.get('http://ip.42.pl/raw').text
2 голосов
/ 16 января 2017

Попробуйте это:

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'])
1 голос
/ 03 августа 2017

Вы можете просто сделать это:

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

Производит:

XX.XX.XXX.XXX
0 голосов
/ 04 марта 2019

С запросами модулем

import requests

public_IP = requests.get("https://www.wikipedia.org").headers["X-Client-IP"]
print public_IP
0 голосов
/ 17 мая 2018

Это способ не звонить в интернет:

Пожалуйста, дайте мне знать, если это не сработает, тогда я могу обновить ответ (он работает на ~ 10 моих серверах).)

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 голосов
/ 06 июля 2017

Getip - это небольшой модуль, который возвращает общедоступный IP-адрес со случайного сервера.

Установка:

~ $ pip install getip2

Использование:

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