2014-07-01 61 views
12

我想用Python知道我的Internet提供商(外部)IP地址(寬帶或其他)。使用Python查找網絡(外部)IP地址

有多臺機器連接到該網絡。我嘗試了不同的方式,但我只有本地和公共IP我的機器。我如何通過Python找到我的外部IP地址?

在此先感謝。

+3

你嘗試過什麼樣的方式? – heinst

+0

我已經試過這個,'import socket socket.gethostbyname(socket.gethostname())'。現在我得到分配給我的機器的IP地址。沒有網絡提供商的IP地址 – Mulagala

+0

@timgeb,如果你看到這個鏈接http://ipinfodb.com/,你可以知道我到底想要什麼。這裏的整個信息來了,國家,城市,提供者IP等 – Mulagala

回答

17

使用該腳本:

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系統 (ipconfig被翻譯)。

針對linux的lib的示例: ifparser

+0

謝謝你,它工作。 – Mulagala

+0

非常優雅的答案! – jedema

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打印更多的值。

非蟒蛇oneliner:

wget -q -O- icanhazip.com 
+0

我正在使用python 2.7。它會工作...? – Mulagala

+0

@Mulagala更改我的答案python2.7 – timgeb

+0

工作很好謝謝 – Mulagala

1

在我看來,最簡單的解決方法是

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

這就是所有。

+0

請注意,它確實需要非默認額外的[Python請求模塊](http://www.python-requests.org)。 – Forage

+0

更好,更優雅 –

11

安全選項(使用https支持)

from requests import get 

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

完全JSON response

附: requests模塊便於支持https。不過你可以試試httplib