【发布时间】:2013-06-13 13:25:18
【问题描述】:
我正在尝试检查某个 IP 地址是否是仅限内部(即私有)IP,但我得到了一个奇怪的结果:
filter_var('173.194.66.94', FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE); // returns 173.194.66.94
filter_var('192.168.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE); // returns false
filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE); // returns 127.0.0.1?
确定 127.0.0.1 算作私有 IP 吗?我发现this bug report from 2010 报告这是一个问题,但它被标记为已修复。这是回归,还是我误解了这个过滤器的作用?我正在使用 PHP 5.4.6。
【问题讨论】:
-
127.0.0.1 不在私有范围内,它是环回 IP。该文档明确指出 FILTER_FLAG_NO_PRIV_RANGE 仅拒绝
10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。 -
对于看到此内容的其他人,您可以使用
FILTER_FLAG_NO_RES_RANGE来检查 127.0.0.1。所以filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
标签: php filter-var