1

如果在 perl 中为 gethostbyname 函数提供了错误格式的 IP 会发生什么?当给定错误格式的 IP(比如 1.1.1)时,我们的一个脚本表现得很奇怪。在调试时,发现 gethostbyname 在给定 1.1.1 时返回一个值..对此有什么想法吗?...在​​我看来,gethostbyname 应该返回 undef,对吗?

4

2 回答 2

3

在 IPv4 的开始,在 CIDR 之前,地址被认为是由网络部分和主机部分组成。这些部分可以以点分十进制形式独立编写,不需要完全分解为字节。网络 1 上的主机 1 也是如此1.1,相当于1.0.0.1或者您也可以将其写为一个 32 位大数字:16777217。曾经有一段时间,人们使用 URLhttp://16777127/来显示他们的聪明程度。当垃圾邮件发送者开始这样做以欺骗过滤器时,这被毁了。

不知何故,当我 ping 时1.1.1,它转到1.1.0.1. 我会猜到1.0.1.1的。我不确定决定它如何分解的规则是什么。

这些旧形式不再被广泛支持(甚至理解),但它们还没有完全从所有工具和库中根除。

PS 在我第一次尝试提交这个答案时,stackoverflow 说:

您的帖子包含指向无效域“16777127”的链接。请通过指定完整域或将其包装在代码块中来更正它。

这就是我所说的“没有得到广泛支持”的意思。

于 2012-07-04T09:10:59.763 回答
2

数字 IPv4 地址可以写成 1、2、3 或 4 个数字分量。每个非最终组件代表 8 位(1 个八位字节),最终组件代表提供完整 32 位地址所需的位数。因此,以下都表示本地环回地址:

2130706433
127.1
127.0.1
127.0.0.1

每个组件本身可以用十进制、十六进制或八进制编写;因此以下都编码相同的地址

0x7f000001
127.0x01
0177.0.1
0x7f.0.0.1
于 2012-07-04T10:04:48.190 回答