1. 程式人生 > >瀏覽器位址列主機IP混淆寫法

瀏覽器位址列主機IP混淆寫法

有一些很奇怪的主機地址寫法,可以讓其完全混淆,雖然RFC要求規範的IP地址,但是應用程式往往不那麼聽話,將原本的IP地址做進制變換和組合,其實瀏覽器都可以接受。

比如以下幾種地址完全等價:

http://127.0.0.1/
http://0x7f.0x0.0x0.0x1/    十六進位制
http://0177.00.00.01/       八進位制

十進位制,十六進位制,八進位制都可以接受。
還有更混淆的方式:

http://0x7f.1/

上面是將第一個8位(IP地址共32位,每8位用10進位制數表示)地址用十六進位制表示,然後將後三個8位先分別用十六進位制表示,之後拼成一個十六進位制數,再轉換為十進位制來表示,就像下面這個例子:
我們有一個地址為 http://127.0.2.44/

,第一個8位用十六進位制表示為0x7f,後三個8位分為用十六進位制表示為0x0,0x2,0x2C,然後拼成一個數為22C,再轉換為十進位制等於556,所以,下面兩個地址完全等價:

http://127.0.2.44/
http://0x7f.556/

舉一反三,只能讓後3個8位進行轉換嗎?我們繼續往下看:
剛剛我們說了,第一個8位變為十六進位制,後3個8位變成十六進位制後再拼接轉為十進位制,這次我們讓前兩個8位變為16進位制,後兩個8位進行上面的變換,結果依舊成立!換句話說,下面五個地址完全等價:

http://127.0.2.44/
http://2130706988/
http://0x7f.556/
http://0x7f.0x0.556/
http://0x7f.0x0.0x2.44/

當然你也可以把上面的方法改為八進位制:
同樣,假如我們有地址http://127.0.2.44/,首先將每個8位轉換為十六進位制,前一位沒有的補0,上面的地址轉換結果為:0x7f,0x00,0x02,0x2c,然後將4個數(或者後三個,後兩個,最後一個數)拼成一個數,結果為7f00022c(注意字首的0不能省略),之後,再轉為八進位制數,結果為017700001054(注意八進位制數的字首0),所以,以下四個地址完全等價:

http://127.0.2.44/
http://017700001054/
http://0x7f.01054/
http://0x7f.0x0.01054/
http://0x7f.0x0.0x2.054/

不過有個問題要注意,就是輸入到瀏覽器中被解析以後,位址列會顯示正常的IP地址,不會顯示混淆的地址。