http:// 8-> http://0.0.0.8是标准约定吗?

时间:2018-10-12 04:04:52

标签: php ip ip-address

今天我发现该命令:

php -S 0:8888

与localhost相同,在localhost上启动服务器

php -S 0.0.0.0:8888

而且,将Safari浏览到:

http://8

将重定向到:

http://0.0.0.8

此外,我发现Safari将以其他方式重定向http://1.2http://1.2.3


是否有任何说明这一点的书面标准或约定,或者我是否在两种不同的软件中找到了类似的复活节彩蛋?

2 个答案:

答案 0 :(得分:1)

不是官方,但它是一个非常接近的RFC草案。它没有定义这种行为,但是它提到了它并使其合法化。

  

与此同时,一个非常流行的IP网络实现在      它自己的方向。 4.2BSD引入了一个函数inet_aton(),该函数的      工作是将字符串解释为IP地址。它      解释了[MTP]中提到的两种语法(请参见上文):      单个数字给出整个32位地址,并以点分隔      八位位组值。它还解释了两种中间语法:八位位组-      点八位字节点16位(用于B类地址)和八位字节-      点24位,用于A类地址。它也允许一些      灵活地指定各个数字部分:它      除十进制外,还允许八进制和十六进制,区分      通过使用包含前缀“ 0”的C语言语法来生成这些半径      或“ 0x”,并允许数字任意长。

     

4.2BSD inet_aton()已被广泛复制和模仿,因此      IPv4地址文本表示形式的事实上的标准。      尽管如此,这些替代语法现在已不再使用      (如果他们曾经有过重要的用途)。他们唯一的实际用途      现在看到的是对地址的故意混淆:提供一个IPv4      地址是人们喜欢的一个32位十进制数字      希望隐藏URL中编码的真实位置。所有      除十进制八位字节外的其他形式都被视为非标准形式(尽管      具有广泛的互用性),并且是不可取的。

https://tools.ietf.org/html/draft-main-ipaddr-text-rep-02


而且,我们可以看到这段代码至今仍然有效:

  

给出整个32位地址的单个数字

❱ ping 2321319336
PING 2321319336 (138.92.133.168): 56 data bytes
...
  

八位字节-点-八位字节-dot-16位,用于B类地址

❱ ping 172.16.2342
PING 172.16.2342 (172.16.9.38): 56 data bytes
....
  

八位点24位,用于A类地址

❱ ping 10.45253
PING 10.45253 (10.0.176.197): 56 data bytes
...

请注意,RFC 3896 explicitly defines是URI中的IP地址,用点分四进制十进制表示形式,因此从技术上来讲,URI中根本不允许使用这些快捷方式!

答案 1 :(得分:0)

IPv4地址是一个无符号的32位整数。按字节的点分表示法只是一种(更易于理解的)变体-很多时候,您可以将两种表示法互换使用:

ping 8.8.8.8
ping ‭134744072‬