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