有一些很奇怪的主机地址写法,可以让其完全混淆,虽然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,所以,下面两个地址完全等价: