【发布时间】:2011-12-05 21:57:31
【问题描述】:
我刚刚注意到,如果我将字符串“10 . 10 . 10 . 10”提供给 getaddrinfo,我会返回地址 0.0.0.10。结果在 OS X (Lion) 和 Linux (CentOS 5.6) 上是相同的。您可以通过以下方式轻松地自行验证:
$ curl 'http://10 . 10 . 10 . 10/'
curl: (7) Failed to connect to 0.0.0.10: No route to host
这种行为是否有特定原因,还是我应该将其视为错误?我原以为它不会返回任何地址。
编辑:“10 asdf”的结果相同,猜测是空间造成的。
【问题讨论】:
-
我使用 getaddrinfo 来验证是否在字段中输入了有效地址,而不是使用容易匹配不好的正则表达式(尤其是对于 IPv6)。
-
但是你为什么一开始就允许空格作为地址的一部分呢?
-
嗯,这就是我要问的不是吗。为什么 getaddrinfo 允许它?我现在在调用 getaddrinfo 之前添加了自己的空格检查,但我仍然认为这种行为很奇怪,并且想知道它是显式的还是意外的。
-
你说你正在传递“10 . 10 . 10 . 10” 到
getaddrinfo- 空格是从哪里来的? -
好的 - 所以重复我之前的问题,为什么你甚至首先允许空格构成地址的一部分,即你为什么允许用户输入IP 地址字段中的空格?