使用PHP验证非私有IP地址
我正在尝试检查一个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_FLAG_NO_PRIV_RANGE); // returns false filter_var('127.0.0.1',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范围,而是一个环回IP范围,如
here所述
Filter flag手册对此具体问题发表了评论. <?php function FILTER_FLAG_NO_LOOPBACK_RANGE($value) { // Fails validation for the following loopback IPv4 range: 127.0.0.0/8 // This flag does not apply to IPv6 addresses return filter_var($value,FILTER_FLAG_IPV6) ? $value : (((ip2long($value) & 0xff000000) == 0x7f000000) ? FALSE : $value); } $var = filter_var('127.0.0.1',FILTER_CALLBACK,array('options' => 'FILTER_FLAG_NO_LOOPBACK_RANGE')); // Returns FALSE $var = filter_var('74.125.19.103',array('options' => 'FILTER_FLAG_NO_LOOPBACK_RANGE')); // Returns '74.125.19.103' // To filter Private IP ranges and Loopback ranges $var = filter_var('127.0.0.1',FILTER_FLAG_NO_PRIV_RANGE) && filter_var('127.0.0.1',array('options' => 'FILTER_FLAG_NO_LOOPBACK_RANGE')); // Returns FALSE ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- CakePHP – 在Model-> beforeSave()中从插入更改为更新
- PHP使用DOM和simplexml读取xml文档的方法示例
- php – Yii on update,检测是??否在beforeSave()上更改了特
- php – wordpress显示之前未显示的随机帖子
- PHP用mb_string函数库处理与windows相关中文字符及Win环境下
- php – 预订应用程序的数据库设计,例如旅馆
- php – 如何将已编写的CodeIgniter代码移动到Kohana?
- php – ZF2中的会话
- php – set_exception_handler是否意味着要取代set_error_h
- yii2高级应用之自定义组件实现全局使用图片上传功能的方法