我想用Python知道我的互联网服务提供商(外部)IP地址(宽带或其他类型)。有多台机器连接到该网络。我尝试了不同的方法,但只得到了我机器的本地和公共IP地址。如何通过Python找到我的外部IP地址?谢谢。
使用此脚本:
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。
您需要使用一个您信任的外部来源。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
info
是一个字典,它没有顺序。每次你打印它时,顺序都会不同。 - timgeb在我看来,最简单的解决方案是
f = requests.request('GET', 'http://myip.dnsomatic.com')
ip = f.text
就这些了。
我的网站http;//botliam.com/1.php输出你的IP地址,所以你只需要这三行代码就可以获取你的IP。
import requests
page = requests.get('http://botliam.com/1.php')
ip = page.text
它正在做的是:
如果你想让自己的服务器返回外部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";
?>
import socket socket.gethostbyname(socket.gethostname())
。现在我得到的是分配给我的机器的IP地址,而不是网络提供商的IP地址。 - Mulagala