如何在內部網路下得知對外的 IP (不是LP)

LP的哏請點右邊的連結:LP分享器

通常我們在家裡申裝的網路是動態的 IP ,而且有些 ISP 公司會不斷的更換 IP ,或是在你網路設備重開機之後會變更,因此我們要自架一台 Server 就非常不方便。

架 Server 基本的條件就是要找到它並為我的需求提供服務,常常找不到人那是要怎麼做服務呢?但是!有固定 IP 是好的,壞處就是電腦會被成為攻擊的對像,防不勝防,這樣對我的需求來說動態 IP 可以減低我防避攻擊的心力。所以我嘗試寫一個程式讓在家裡的電腦隨時通知動態 IP 的位址。

家裡的網路環境如下圖:

currentipfromnat

我架設的 Server 在路由器後面,以路由器的設定,必需要設定好通訊埠的開放跟對應跟指定靜態的內部 IP 。然而目前最基本安裝好的 Server 是沒有任何的指令可以快速查詢在內部網路下對外的 IP 位址,所以無論是 ipconfig 或是 ip a 都只能得知本機的網路位址。

在純文字模式下,用 curl 可以得知如下的結果:

螢幕快照 2013-07-10 下午4.52.51

但是,它回應的結果是一串 html 的程式碼,這樣子仍還不夠得知,而且這結果必須要寄到我的 gmail 才方便讓我在外面知道家中的位址。所以我只好挽起袖子來動手了。

前面說這麼多,我就把 Sorce Code 放在 Github 上給各位參考,網址如下:

https://github.com/michael520/currentip

我來簡單說明一下這些內容。

目錄結構:

螢幕快照 2013-07-10 下午4.08.53

  • 主程式為 getmyip.py 。
  • 設定檔為 base_setting.ini (sample_setting.ini 是設定檔範本)。
  • 目錄 IPs 是存放詢過的對外網路位址。
  • README.md 由 Github 所建議的 markdown 說明檔。

如何運作:

把 getmyip.py 下一道 python 可執行的命令,如下:

螢幕快照 2013-07-10 下午4.26.20

這支程式會去查詢 IPs 的目錄是否有相同的檔案,並建立以 IP 位址為檔名,如果下次執行時在建立檔案時會起衝突,則表示 IP 沒有變化。變化後的 IP 接下來就執行寄信流程,將新的 IP 送到我的 gmail ,結果如下圖

螢幕快照 2013-07-10 下午4.42.51

之彼,把這支程式設定到 crontab ,指令如下:

*/30 * * * * python /home/to/myhom/scriptdir/getmyip.py

可每 30 分鐘幫你查詢對外 IP ,不過,間隔要久點,不要少於 10 分鐘以下,怕對方的伺服器把你的電腦阻擋做處罰。

目前這支程式還能滿足我的需求,未來還會把它做修改,下一個要做的就是把 IP 紀錄寫在檔案中,把值做個「專業」的處理。

其實用檔案的方式紀錄有個缺點,就是經過幾天後,如果 IP 重複取得,IPs目錄有舊的檔名,就會以為沒變而不發送通知,這就是 bug 😛

下篇文章將詳細的解釋這支程式運作的 Source Code 。

Related Posts Plugin for WordPress, Blogger...

Leave a Reply