使用 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 地址的主要内容,如果未能解决你的问题,请参考以下文章

python 使用Pyhton查找外部IP

Python进阶之网络编程

需要在 Ubuntu 上使用 PHP 查找网络接口的 IP 地址

获取公共/外部 IP 地址?

如何在网络上通过MAC地址查找IP ?

使用Python的stdlib查找本地IP地址