给定IP时perl gethostbyname

时间:2012-07-04 08:40:50

标签: perl gethostbyname

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

2 个答案:

答案 0 :(得分:3)

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

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

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

P.S。在我第一次尝试提交这个答案时,stackoverflow说:

  

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

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

答案 1 :(得分: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