如何使用python2.7获取公共IP?

如何使用python2.7获取公共IP?,python,ip,Python,Ip,如何使用python2.7获取公共IP?非专用IP。目前有几种选择: ip.42.pl jsonip.com httpbin.org ipify.org 下面是您可以利用上述每一项的确切方法 ip.42.pl 从urllib2导入urlopen my_ip=urlopen('http://ip.42.pl/raw)。读() 这是我找到的第一个选择。对于脚本来说非常方便,这里不需要JSON解析 jsonip.com 从json导入加载 从urllib2导入urlopen my_ip=加载(u

如何使用python2.7获取公共IP?非专用IP。

目前有几种选择:

  • ip.42.pl
  • jsonip.com
  • httpbin.org
  • ipify.org
下面是您可以利用上述每一项的确切方法

ip.42.pl
从urllib2导入urlopen
my_ip=urlopen('http://ip.42.pl/raw)。读()
这是我找到的第一个选择。对于脚本来说非常方便,这里不需要JSON解析

jsonip.com
从json导入加载
从urllib2导入urlopen
my_ip=加载(urlopen)http://jsonip.com)[“ip”]
这个域的唯一目的似乎是用JSON返回IP地址

httpbin.org
从json导入加载
从urllib2导入urlopen
my_ip=加载(urlopen)http://httpbin.org/ip)[“来源”]
org是我经常推荐给初级开发人员用于测试脚本/应用程序的服务

ipify.org
从json导入加载
从urllib2导入urlopen
my_ip=加载(urlopen)https://api.ipify.org/?format=json)[“ip”]
此服务的强大源于缺乏限制(没有速率限制)、基础设施(放在Heroku上,考虑到高可用性)和灵活性(适用于IPv4和IPv6)

编辑:添加到可用选项列表中

编辑:感谢添加。

尝试以下操作:

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

我喜欢这个带有


您可以这样做:

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

XX.XX.XXX.XXX

这是一种不必拨打互联网电话的方式:

如果这不起作用,请告诉我,然后我可以更新答案(它适用于我的10台服务器)


使用请求模块

import requests

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

在Python2.7中,它只是一个两行代码

导入请求

打印请求。获取(“”)文本


我同意这篇文章是重复的——同样的答案可能是@kert的重复:谢谢!我喜欢icanhazip.com,它是一个完整的网站,只有你的原始IP;无需添加数组、格式等。只需为ipify.org添加:url
https://api.ipify.org/?format=raw
您将获得纯文本的IP,无JSON废话。导入ipgetter;IP=ipgetter.myip()足以胜任此项工作。ipgetter(尚未)支持IPv6,尽管IPv6已经庆祝了它的二十岁生日:(很好!:)我喜欢这个而不是ping一些随机的站点。我想说它更脆弱,但我想它比其他一些网站的名字更大。只要他们不改变标题的操作方式……请不要回答重复的问题。将它们标记为副本。这使它更有条理。
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"]
import requests

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