使用 Python 查找网络(外部)IP 地址
Posted
技术标签:
【中文标题】使用 Python 查找网络(外部)IP 地址【英文标题】:Finding network (external) IP addresses using Python 【发布时间】:2014-08-21 22:08:51 【问题描述】:我想用 Python 知道我的互联网提供商(外部)IP 地址(宽带或其他)。
有多台机器连接到该网络。我尝试了不同的方式,但我的机器只有本地和公共 IP。如何通过 Python 找到我的外部 IP 地址?
提前致谢。
【问题讨论】:
你尝试了哪些方法? 我已经试过了,import socket socket.gethostbyname(socket.gethostname())
。现在我正在获取分配给我机器的 IP 地址。不是网络提供商的 IP 地址
Finding a public facing IP address in Python?的可能重复
【参考方案1】:
使用这个脚本:
import urllib, json
data = json.loads(urllib.urlopen("http://ip.jsontest.com/").read())
print data["ip"]
没有 json :
import urllib, re
data = re.search('"([0-9.]*)"', urllib.urlopen("http://ip.jsontest.com/").read()).group(1)
print data
解析 ifconfig (= linux) 或 ipconfig (= windows) 命令的其他方式,但要注意翻译的 Windows 系统 (ipconfig 已翻译)。
Linux 的 lib 示例: ifparser.
【讨论】:
非常优雅的答案!【参考方案2】:安全选项(支持https
)
from requests import get
get('https://ipapi.co/ip/').text
填写JSON response
附: requests
模块方便https
支持。不过你可以试试httplib。
【讨论】:
【参考方案3】:您必须使用您信任的外部来源。 Python2.x:
from urllib import urlopen
import json
url = 'http://api.hostip.info/get_json.php'
info = json.loads(urlopen(url).read())
print(info['ip'])
如果您想了解更多信息,可以从info
打印更多值。
非python oneliner:
wget -q -O- icanhazip.com
【讨论】:
@Mulagala 将我的答案更改为 python2.7 如何获取用户的位置以存储上次登录的位置info
是一个字典,它没有顺序。每次打印的顺序都会不同。
对不起,我没有找到你,我的要求是找到我的用户位置以保存上次登录的位置。这里的代码正在我的服务器上执行,所以我正在获取我的位置,现在我需要我的客户端位置那些谁正在登录我的网站,如果您知道,请帮助我。感谢您的 advacne
我认为您应该提出一个新问题,在评论中很难回答。【参考方案4】:
你可以看看这个答案:
https://***.com/a/22157882/5687894
TL;DR:
import ipgetter
ip=ipgetter.myip()
【讨论】:
【参考方案5】:我认为最简单的解决方案是
f = requests.request('GET', 'http://myip.dnsomatic.com')
ip = f.text
仅此而已。
【讨论】:
请注意,它确实需要非默认附加 Python Requests module。 更好更优雅【参考方案6】:我的网站http;//botliam.com/1.php输出你的ip,所以你只需要这3行就可以得到你的ip。
import requests
page = requests.get('http://botliam.com/1.php')
ip = page.text
它在做什么:
打开我的网页并将其称为“页面” 将“ip”设置为“页面”的内容如果您希望自己的服务器返回您的外部 ip 而不是依赖我的网站,则代码如下:
<?php
$ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');
echo "$ip";
?>
【讨论】:
以上是关于使用 Python 查找网络(外部)IP 地址的主要内容,如果未能解决你的问题,请参考以下文章