如何判斷自己是公網ip?趁熱記錄下,給未來的自己說到查自己主機在公網上的IP,你的第一反應是用什麼: ifconfig? curl ip.sb? 百度/谷歌我的ip?這些方法都對,也都不對下面從我們一個實際開發的業務場景來逐步抽絲剝繭這個過程吧,接下來我們就來聊聊關于如何判斷自己是公網ip?以下内容大家不妨參考一二希望能幫到您!
趁熱記錄下,給未來的自己
說到查自己主機在公網上的IP,你的第一反應是用什麼: ifconfig? curl ip.sb? 百度/谷歌我的ip?這些方法都對,也都不對。下面從我們一個實際開發的業務場景來逐步抽絲剝繭這個過程吧。
我們在使用雲端數據庫的時候,本地需要連接數據庫進行開發管理。
默認情況下,從安全角度考慮,雲端的數據庫是禁止外網訪問的。如果需要外網訪問,可以通過設置IP白名單進行過濾。因此,我們可以将單位的出口IP添加到數據庫連接的白名單中,這樣開發同學在單位的網絡環境下,就可以本地連接雲端數據庫了。
按照這個思路走,首先需要獲取單位的出口IP是什麼。用curl ip.gs得到出口IP是:IP_A, 然後将這個IP_A加入到了數據庫訪問的白名單中, 然後本地訪問數據庫,發現連接不上,telnet 數據庫的端口也顯示無法連接。
連接不上,排查的思路有2個:
第一個排查思路,雲端這個SaaS服務出問題的概率基本很小,而且比較難以從使用者的角度去直接證明。第二個排查思路,比較好處理,而且如果這個排查思路被證實/證僞,那麼可以間接去證明第一個排查思路。
如果IP_A有問題,說明這個IP并不是真正連接數據庫的IP,那麼真正連接數據庫的IP是否可以獲得呢?答案是可以的:
然後把IP_B添加到數據庫訪問的白名單之後,就可以正常訪問數據庫了。
其實到這裡,就會有個問題出現:
為什麼我通過curl ip.gs 或者google查詢我的IP顯示的都是IP_A,而數據庫連接後,顯示我的IP是IP_B呢?
因為單位的網絡是(合法地)支持科學上網的,會根據請求的目的地地址,自動判斷走國内的網絡還是走境外的代理。在獲取IP_A的時候,其實請求的目的地地址都在境外,所以返回的公網IP自然也是境外代理的IP,也就是IP_A。如果用curl cip.cc 或者 baidu查詢我的IP顯示的就是IP_B,這個是走的國内的網絡。
以上。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!