浏览器地址栏主机IP混淆写法

版权声明:本文为博主原创文章,未经博主允许请尽情转载。 https://blog.csdn.net/yanghuan313/article/details/52717406

有一些很奇怪的主机地址写法,可以让其完全混淆,虽然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地址,不会显示混淆的地址。

猜你喜欢

转载自blog.csdn.net/yanghuan313/article/details/52717406
今日推荐