IP地址的特殊解析
程序员文章站
2022-07-04 18:42:15
IP地址的特殊解析...
经常上网就会遇到这样的网址http://3396081157,让人感到奇怪,而好奇心使我们忍不住去点击它们,发现它是有效链接,能连到其他网站上。还有,我们在浏览深层目录网页时,浏览器地址栏中会出现%72%65%61%64%6c%6f%67的字符,这是为什么呢?其实它们也是网址,只不过是以不常见的形式表现除来罢了。而有些spamer和scammer却常常借此来隐蔽自己真实的身份。以下我就要说明如何把正常的网址进行变形,让大家看清它们的真面目。
我们知道域名http://www.microsoft.com是为了帮助人们记忆而设计的,当我们在浏览器的地址栏输入域名后,它要转化为ip地址,然后进行查找。ip地址一般是由/"."分开的四组十进制的数字组成,每组数字从0~255,其实它也可以用二进制、八进制、十六进制形式表示。因此上面的怪网址就是实际上就是ip地址的二进制、八进制、十六进制形式,那么如何对ip地址进行变形呢?我们先可以用ping 命令得到一个域名的ip地址。连上网络,从windows转入dos状态,就可用这个命令,其格式为:ping 域名,如 ping http://www.baidu.com/ 就可以得到ip地址202.108.22.5。
我们以把十进制形式的ip地址的格式转为十六进制形式,即双字ip格式为例说明如何异形ip。打开windows自带的计算器,选择"科学型"。此时十进制是默认模式。首先输入第一组数字202,然后点击十六进制值,202就会转化为十六进制值ca。依次把后面三组数字转化为十六进制值,108的十六进制值6c,22的十六进制值16,5十六进制值为05。最后把它们连在一起,即ca6c1605,这就是ip地址202.108.22.5的十六进制形式。最后把ca6c1605输入设为十六进制模式的计算器,点击十进制制式把这组数字转为十进制值3396081157。这个数字是最终的变形,称为大数 ip。反之从这种数字形式的网址也可反算出它的真正的ip地址,这样那些spammer和scammer就难逃我们的火眼金睛了。
双字ip格式一般可以直接用与ie5.0浏览器的地址栏中,或在前面加上0x,即0xca6c1605同域名的效果是一样的。而且在它前面加上任意的十六进制数字还是同样有效,比如0x9aca6c1605。其实得到双字ip后在每个十六进制值前面加上0x(0x表示后面的数字是十六进制形式),然后象十进制ip地址一样用圆点分开,比如 0xca.0x6c.0x16.0x05,与十进制ip同样有效。
另外还可以用以下这个公式来直接计算出上面的大数ip ip = v*256^3 + x*256^2+ y*256 + z*256^0 其中 v是十进制ip地址的第一组数字,如上例中的202;x是第二组数字,如上例中的108; y是第三组数字,如上例中的22;z是第四组数字,如上例中的5。而且还有个有趣的现象,在上面的公式中再添加上一个项式n?256^4 ,即 ip =n*256^4+ v*2563 + x*256^2 + y*256 + z*256^0 虽然计算所得的结果不同,但是它的效果相同,也能连到同样的网站上。因为这些数字转化成十六进制值时,它们最后的八位数字都相同,而相关程序在解析ip地址时就只认后8位数字,前面的数字一概不管。
按同样的原理,也可以把十进制ip转为八进制和二进制的形式。比如202.108.22.5转为八进制形式0312.0154.0026.0005 要注意数值前面的"0"不能少,它向浏览器说明后面的数值是八进制的。对二进制的形式转化应更容易,就不再说明了。
以上所述只是网址异形的基本形式,还有更为怪异的变形。一个ip地址可以用十、八、十六进制的数值混合起来表示,同样有效。如202.108.22.5可以表示为0xca.108.0026.0x05,还可以进一步变形http://www.readlog.cn@0xca.108.0026.0x05/ ,而且ip地址后面的路径和文件名所用字母和符号都可以用十六进制的数值代替, 如 http://0xca.108.0026.0x05/%73earch/jiqiao.html 同样我们也要注意在每个数值前面加个"%",说明后面的数值是十六进制形式的。
最后要说明一下注意的事项
1、在netscape的浏览器上不能用十六进制形式的ip,混合形式的ip只能也不能含有十六进制数值,只能是八、十进制的。
2、双字ip在部分低版本的ie和opera中不能用。
3、在http://和@之间可以填任何东西,但有一些符号是不能使用的,如用于ie就不能有"^ # % " `< > "。
4、除了十进制ip地址,其他任何形式的ip最好不要用于代理服务器和局域网中。演示:原始ip:http://202.108.22.5
8进制编码:http://0312.0154.0026.0005
10进制编码:http://3396081157
16进制编码:http://0xca6c1605
我们知道域名http://www.microsoft.com是为了帮助人们记忆而设计的,当我们在浏览器的地址栏输入域名后,它要转化为ip地址,然后进行查找。ip地址一般是由/"."分开的四组十进制的数字组成,每组数字从0~255,其实它也可以用二进制、八进制、十六进制形式表示。因此上面的怪网址就是实际上就是ip地址的二进制、八进制、十六进制形式,那么如何对ip地址进行变形呢?我们先可以用ping 命令得到一个域名的ip地址。连上网络,从windows转入dos状态,就可用这个命令,其格式为:ping 域名,如 ping http://www.baidu.com/ 就可以得到ip地址202.108.22.5。
我们以把十进制形式的ip地址的格式转为十六进制形式,即双字ip格式为例说明如何异形ip。打开windows自带的计算器,选择"科学型"。此时十进制是默认模式。首先输入第一组数字202,然后点击十六进制值,202就会转化为十六进制值ca。依次把后面三组数字转化为十六进制值,108的十六进制值6c,22的十六进制值16,5十六进制值为05。最后把它们连在一起,即ca6c1605,这就是ip地址202.108.22.5的十六进制形式。最后把ca6c1605输入设为十六进制模式的计算器,点击十进制制式把这组数字转为十进制值3396081157。这个数字是最终的变形,称为大数 ip。反之从这种数字形式的网址也可反算出它的真正的ip地址,这样那些spammer和scammer就难逃我们的火眼金睛了。
双字ip格式一般可以直接用与ie5.0浏览器的地址栏中,或在前面加上0x,即0xca6c1605同域名的效果是一样的。而且在它前面加上任意的十六进制数字还是同样有效,比如0x9aca6c1605。其实得到双字ip后在每个十六进制值前面加上0x(0x表示后面的数字是十六进制形式),然后象十进制ip地址一样用圆点分开,比如 0xca.0x6c.0x16.0x05,与十进制ip同样有效。
另外还可以用以下这个公式来直接计算出上面的大数ip ip = v*256^3 + x*256^2+ y*256 + z*256^0 其中 v是十进制ip地址的第一组数字,如上例中的202;x是第二组数字,如上例中的108; y是第三组数字,如上例中的22;z是第四组数字,如上例中的5。而且还有个有趣的现象,在上面的公式中再添加上一个项式n?256^4 ,即 ip =n*256^4+ v*2563 + x*256^2 + y*256 + z*256^0 虽然计算所得的结果不同,但是它的效果相同,也能连到同样的网站上。因为这些数字转化成十六进制值时,它们最后的八位数字都相同,而相关程序在解析ip地址时就只认后8位数字,前面的数字一概不管。
按同样的原理,也可以把十进制ip转为八进制和二进制的形式。比如202.108.22.5转为八进制形式0312.0154.0026.0005 要注意数值前面的"0"不能少,它向浏览器说明后面的数值是八进制的。对二进制的形式转化应更容易,就不再说明了。
以上所述只是网址异形的基本形式,还有更为怪异的变形。一个ip地址可以用十、八、十六进制的数值混合起来表示,同样有效。如202.108.22.5可以表示为0xca.108.0026.0x05,还可以进一步变形http://www.readlog.cn@0xca.108.0026.0x05/ ,而且ip地址后面的路径和文件名所用字母和符号都可以用十六进制的数值代替, 如 http://0xca.108.0026.0x05/%73earch/jiqiao.html 同样我们也要注意在每个数值前面加个"%",说明后面的数值是十六进制形式的。
最后要说明一下注意的事项
1、在netscape的浏览器上不能用十六进制形式的ip,混合形式的ip只能也不能含有十六进制数值,只能是八、十进制的。
2、双字ip在部分低版本的ie和opera中不能用。
3、在http://和@之间可以填任何东西,但有一些符号是不能使用的,如用于ie就不能有"^ # % " `< > "。
4、除了十进制ip地址,其他任何形式的ip最好不要用于代理服务器和局域网中。演示:原始ip:http://202.108.22.5
8进制编码:http://0312.0154.0026.0005
10进制编码:http://3396081157
16进制编码:http://0xca6c1605