为什么此URL前面带有过多的点,会解析为IP地址?


31

http://.................1168951531

将其放到chrome中时,预览到URL http://69.172.200.235/,该URL 重定向(通过外部服务器响应代码3XX)到www.test.com,但这超出了我想要弄清楚的范围。

像上面这样的怪异URL如何解析为IP地址?这是格式化规则吗?


2
请注意,没有点号的相同网址在Chrome中也适用:http://1168951531。但这引出了一个问题,为什么Chrome忽略了这些点?
wjandrea

6
@wjandrea我想Chrome会将它们解释为子域,而实际上并没有忽略它们。您可以通过查看Chrome发送的请求的主机标头来进行检查。
Christoph

1
一点点切线,但是Gmail地址允许您添加所需的任意数量的点,而不会引起问题,还可以在其后加上任何文本加上+。因此,abcd@gmail.com还会接收发送到a.b.c.d@gmail.comabcd+junkmail@gmail.com-的邮件,好处是向不同的站点发送不同的电子邮件,以查看谁将您放入垃圾邮件列表,或者设置规则以根据“收件人”地址以不同方式处理传入邮件。(更多)或者,kylesmom @ gmail.com现在是kylesmom + is.a.big.fa ...
ashleedawg

值得一提的是,Firefox和squid的结合不允许这样做。Firefox通过逐字逐句和鱿鱼错误传递点,因为它是无效的URL格式。因此,这似乎是一个Chrome错误,或者有关空域的规范可能含糊不清?
Paul Gear

Answers:


44

Chrome会将数字1168951531解释为十进制数,当以十六进制表示时为45ACC8EB。当您将每对十六进制数字作为一个十进制数时,十六进制的45ACC8EB与点分十进制的69.172.200.235相同。

45 -> 69
AC -> 172
C8 -> 200
EB -> 235

简短答案:这是同一IP地址的纯十进制表示形式。


4
Firefox也进行解释(不带点),但不进行Edge解释。
JAB

11
解析主机名的典型源代码是首先检查它是否为IP地址(例如,带有inet_addr()),如果不是,则将其传递给gethostname()查询DNS服务器的函数(并读取hosts文件)。如上面的答案中所述,传递IP地址的十进制表示形式在大多数实现中是完全合法的。我可以输入ping 1168951531一个终端,它实际上可以ping通预期的地址。前面的所有点都变得更奇怪,但是Chrome可能会在尝试解决分辨率之前将其删除。
Ale

1
值得注意的是,Chrome和Firefox都接受不带点的URL。(http://1168951531
Stevoisiak

3

这是ip 69.172.200.235的ipv4地址的长形式表示。哪个映射到www.test.com域。


4
您能解释什么是“长期代表”吗?
菲利普

2
另一个答案可以更好地解释它,但仍然归结为同一件事。
Gothrek '18

9
也许应该是“ long代表”
n0rd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.