在Python中查找公共IP地址?

21

如何使用Python查找我的网络的公共IP地址?


是的,我问这个问题是为了回答它,但它不在这里,我可以看到其他人需要这些信息。 - UnkwnTech
我看到的所有答案都会报告任何正在使用的Web代理的IP地址,而不一定是您系统的公共面向IP地址(未通过Web代理运行的任何内容可能具有完全不同的IP地址)。 - Keith Schoenefeld
8个回答

14

2
使用 https 协议进行某事时增加了 +1。 - user4805123

13

这将获取您的远程IP地址

import urllib
ip = urllib.urlopen('http://automation.whatismyip.com/n09230945.asp').read()
如果您不想依赖别人,那么只需上传这样的PHP脚本:
<?php echo $_SERVER['REMOTE_ADDR']; ?>

并更改Python或ASP中的URL:

<%
Dim UserIPAddress
UserIPAddress = Request.ServerVariables("REMOTE_ADDR")
%>

注意:我不懂ASP,但我认为在这里放一下可能会有用,所以我谷歌了一下。


1
php手册REMOTE_ADDR是“用户查看当前页面的IP地址。”也就是说,您需要将php脚本放在外部服务器上才能获取您的公共IP。此外,automation.whatismyip.com无法访问。http://canihazip.com/s可以使用。 - jfs
1
看起来 automation.whatismyip.com 不再运行了,他们要求你创建一个账户并使用他们的主页。 - Ian M
whatsmyip.com/org 似乎不再允许来自未知用户代理的请求。api.ipify.org 看起来没有这个问题。让我看看是否可以编辑这个答案。 - Rubin Simons

6
import requests
r = requests.get(r'http://jsonip.com')
# r = requests.get(r'https://ifconfig.co/json')
ip= r.json()['ip']
print('Your IP is {}'.format(ip))

Reference


6

whatismyip.org更好...它只以纯文本形式返回IP地址,没有多余的东西。

import urllib
ip = urllib.urlopen('http://whatismyip.org').read()

但是,如果不依赖于网络本身之外的东西,很难轻松地完成它。


我所引用的链接也是如此,它只返回原始IP地址。 - UnkwnTech
3
不再仅提供纯文本。 - powlo
似乎也认为我住在堪萨斯州。我们不再是在堪萨斯州了,托托。 - powlo
最近,whatsmyip.org/com似乎基于User-Agent进行了阻止,或者类似的操作;另一个答案中提到的api.ipify.org则没有这种情况。 - Rubin Simons

4

3
import urllib2
text = urllib2.urlopen('http://www.whatismyip.org').read()
urlRE=re.findall('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',text)
urlRE        

['146.148.123.123']

尝试将您能找到的所有“findmyipsite”放入列表中,并进行比较遍历。这种方法似乎效果很好。

1

这很简单

>>> import urllib
>>> urllib.urlopen('http://icanhazip.com/').read().strip('\n')
'xx.xx.xx.xx'

0

你也可以使用 DNS,这在某些情况下可能比 http 方法更可靠:

#!/usr/bin/env python3

# pip install --user dnspython

import dns.resolver

resolver1_opendns_ip = False
resolver = dns.resolver.Resolver()
opendns_result = resolver.resolve("resolver1.opendns.com", "A")
for record in opendns_result:
    resolver1_opendns_ip = record.to_text()

if resolver1_opendns_ip:
    resolver.nameservers = [resolver1_opendns_ip]
    myip_result = resolver.resolve("myip.opendns.com", "A")
    for record in myip_result:
        print(f"Your external ip is {record.to_text()}")

这是Python版本的dig +short -4 myip.opendns.com @resolver1.opendns.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接