原來IP地址還能這麼玩,你見過嗎?

我們日常見到的IP地址,都是 127.0.0.1這樣的四個不大於255的整數表示,但是你見過 2130706433 這樣的IP地址嗎?對,就只有2130706433。

這是一個IP?我們來試試

原來IP地址還能這麼玩,你見過嗎?

ping 2130706433

我們都知道IPv4“由32位二進制數組成,為便於使用,常以XXX.XXX.XXX.XXX形式表現,每組XXX代表小於或等於255的10進制數。”

但是,形如 123.126.96.00000322這樣的IP,IP不是不能大於255麼,那你可以嘗試 ping 一下,返回地址來自於 123.126.96.210。

原來IP地址還能這麼玩,你見過嗎?

ping

是不是懵了?還能這麼玩。

混合進制

查了下,原來 IP 地址居然可以混合進制來顯示……前導的 0 的數字會被當作八進制來處理。而且可以同時使用不同進制:包括十六進制、八進制和十進制。 比如 http://0x17.244.0xc8.00000354 這樣奇葩的地址也是可以訪問的……

DWORD 形式的 IP

還有更奇葩的,整數型的 IP —— 比如這個:http://401918188 ,同樣可以訪問。 轉換過程是將 23.244.200.236 轉換為二進制形式,不足8為的數字用 0 補足: 00010111111101001100100011101100,然後將這一串二進制數字轉換為整數,即可得到整數型的 IP 地址。 當然,如果將這個整數換成其他進制也是可以的,比如: http://02775144354 和 http://0x17f4c8ec

可省略的 0

當然,奇葩還沒有結束。比如這樣的 IP 地址 192.168.1 也是可以訪問的……因為某部分為 0 則可以省略。OK,那我們怎麼知道省略的是哪一部分呢?別急,「聰明」的標準的制定者們早就想到這一點了,規則如下:

原來IP地址還能這麼玩,你見過嗎?

IP地址中可省略的 0

其他

那麼現在知道了 IP 127.0.0.1 按上面的方法改變下形式

  1. http://0x7f.0.000000000001
  2. http://2130706433
  3. http://017700000001
  4. http://0x7f000001
  5. http://127.1

目前rfc 文檔都是語焉不詳,並沒有十分明確的說法。 但是主流瀏覽器和很多其他軟件都支持這種表示方法。然而某些地方可能導致問題,一般不推薦這種做法,比如我遇到過連接memcache,用127.0.0.1可以連接,但是用127.1就死活連接不上。

算是增加一個小技巧吧。


分享到:


相關文章: