如果我们指定一个 IPv4 地址,我们通常会采用 1.2.3.4 的模式,现在本质上这只是以更易于人类阅读的形式编写 32 位数字的“一种”方式。
IP 地址 1.2.3.4 也可以写成 1.2.(3*256+4) = 1.2.772
这使得您可以拥有一个带有 3 个点(即常见做法)、2 个点、1 个点和根本没有点(即将普通的无符号 32 位整数写为十进制整数)的 IP 地址。
使用这种替代符号,你可以写出一些更易读的 IP 地址:10.10.4000 与 10.10.15.160 相同
其中一个有趣的副作用是,如果将其与 apache 之类的 Web 服务器结合使用,则可以在单个 IP 地址上定义 4 个不同的 vhost,而无需使用 DNS 或 hosts 文件。(在家尝试一下 ;)
我知道有很多基于 GUI 的工具(如 Windows IP 配置)只有 4 个字段,而且都只接受 0-255。许多命令行工具(如 ping、curl、ssh 等)和几乎所有 Web 浏览器(基本上都有自由格式的地址栏)都可以获得“任何”格式。
现在我的问题是:我们在野外拥有的接受任何形式的工具对此类替代 IPv4 符号的接受程度如何?
答案1
它之所以有效,是因为inet_addr 函数有效。实际上,每个网络应用程序的代码都使用它来将 IP 字符串转换为整数形式,并且它支持 a、ab、abc 和 abcd 表示法。
因此,是的,可以相当安全地假设可以将这四种符号用于 IP 地址。
答案2
我不喜欢用整数表示法来写 IP 地址,除了a.b.c.d
形式其中 4 个值中的每一个都在 0-255 范围内(有其他限制)。
其他符号只会导致误解和更多的错误。
我赞成识别所有允许此类解释的工具和应用程序并进行修复。
我们最终将拥有也可以使用 IPv6 符号;别把事情搞乱了。
答案3
Chrome 的位置栏可以很好地自动完成点 IP,并在您输入时显示结果。例如,http://10.1->http://10.0.0.1,http://10.2.4->http://10.2.0.4, ETC。
答案4
如果您偶然发现读取 IP 地址的 .NET 程序,您可以指望它也支持十进制表示。我使用的编程语言中的大多数解析器的行为都相同。
不幸的是,当您尝试从 UI 执行此操作时,他们中很少有人使用 RegEx 来检查是否输入了点语法。因此,虽然他们能够解析它,但他们选择不这样做。
但是,请注意,点分语法比十进制表示法更易读且更容易记忆。