星期一, 11月 01, 2010

寫程式 取得 public IP

草屯工藝館

所謂的 public IP 是指外面的網路世界是用那一個 IP 來辨識你的存在,一般又稱作 WAN IP。從自己電腦的角度來看, public IP 就是你的封包對外的出口。有時候家裡的網路只有一個固定或者是變動的 IP ,為了讓每一台電腦都可以上網,我們會用 router 把家裡所有的電腦連在一起。對外的 public IP 給 router 使用,其他的電腦都透過 DHCP 技術使用 private IP 上網。

現在問題來了,我們要怎麼從區網內找到 public IP ?在電腦上可以找到一些網路設定,像是自己的 IP,mask,gateway IP....。但是要怎麼找到一台甚至是很多台 router 之外的那台對外的 router 的 IP?

好像很難?用 nmap ?沒試過,也許可以?但是一定要消耗很多的資源。 一開始我猜應該可以從外面下手,發一個封包到特定的 server ,讓那台 server 幫你檢查封包,這樣就可以拿到你想要的 public IP。但是,要自己另外架一個 server 會不會太麻煩。其實用 python 配合一個網站就可以做到這個工作。在 interpreter 下打使用兩行程式,

>>> import urllib2
>>> urllib2.urlopen('http://whatismyip.org').read()
'www.xxx.yyy.zzz'

'www.xxx.yyy.zzz' 就是家裡區網的 public IP 了,夠簡單吧。

為什麼需要這種功能呢?其實是外面免費的DDNS太不牢靠了,三天兩頭就消失給你看。而且需求其實也只是需要知道家裡的 server 目前的 IP,有沒有 DDNS 其實不是很重要。所以寫了個小程式讓 server 定時回報 IP。希望這是個可長可久的方法。

Reference:  Get public IP from behind a router (in Python) 
(http://davconvent.objectis.net/knowledge/py-get-public-ip/) 

沒有留言: