使用Python查找网络(外部)IP地址

16
我想用Python知道我的互联网服务提供商(外部)IP地址(宽带或其他类型)。有多台机器连接到该网络。我尝试了不同的方法,但只得到了我机器的本地和公共IP地址。如何通过Python找到我的外部IP地址?谢谢。

3
你尝试过哪些方法? - heinst
我尝试了这个代码:import socket socket.gethostbyname(socket.gethostname())。现在我得到的是分配给我的机器的IP地址,而不是网络提供商的IP地址。 - Mulagala
@timgeb,如果你看到这个链接http://ipinfodb.com/,你就可以知道我想要什么。这里提供了完整的信息,如国家、城市、提供商IP等。 - Mulagala
6个回答

19

使用此脚本:

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的一个库的例子: ifparser


非常优雅的回答! - Samuel Dauzon

14

安全选项(支持https

from requests import get

get('https://ipapi.co/ip/').text

完整的JSON响应

P.S.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单行代码:

wget -q -O- icanhazip.com

@Mulagala 把我的答案改成了 Python 2.7。 - timgeb
如何获取用户的位置信息以存储上次登录的地点。 - Mulagala
info 是一个字典,它没有顺序。每次你打印它时,顺序都会不同。 - timgeb
抱歉,我没听懂你的意思。我的需求是找到我的用户位置以保存最后登录的地点。这段代码正在我的服务器上执行,所以我得到的是我的位置。现在我需要我的客户端位置,那些登录到我的网站的人,请帮帮我,如果你知道的话。提前致谢。 - Mulagala
我认为你应该开一个新的问题,因为在评论中回答很困难。 - timgeb

1

0

在我看来,最简单的解决方案是

f = requests.request('GET', 'http://myip.dnsomatic.com')
ip = f.text

就这些了。


请注意,这需要非默认的附加 Python Requests 模块 - Forage
更好,更优雅 - Kostas Demiris

-1

我的网站http;//botliam.com/1.php输出你的IP地址,所以你只需要这三行代码就可以获取你的IP。

import requests
page = requests.get('http://botliam.com/1.php')
ip = page.text

它正在做的是:

  • 打开我的网页并将其命名为“page”
  • 将“ip”设置为“page”的内容

如果你想让自己的服务器返回外部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";
?>

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