有时候需要判断某个IP是否在某个范围内,对于有划分子网的网络,一眼是很难判断的,需要计算子网起止与结束地址,对于学过CCNA知识的未必会算的清楚。看代码:
<?php /** * 判断IP是否在某个网络内 * 运维生存时间 * site:www.ttlsa.com * @param $ip * @param $network * @return bool */ function ip_in_network($ip, $network) { $ip = (double) (sprintf("%u", ip2long($ip))); $s = explode('/', $network); $network_start = (double) (sprintf("%u", ip2long($s[0]))); $network_len = pow(2, 32 - $s[1]); $network_end = $network_start + $network_len - 1; if ($ip >= $network_start && $ip <= $network_end) { return true; } return false; } ?>
这种方法可以当做一个常用函数来使用。啰嗦一句,对于要把IP地址存入数据库的情况下,强烈建议先用ip2long进行转换后再存入数据库。文章源自运维生存时间-https://www.ttlsa.com/php/php-to-determine-whether-ip-in-a-network/
如需转载请注明出处:https://www.ttlsa.com/html/2751.html文章源自运维生存时间-https://www.ttlsa.com/php/php-to-determine-whether-ip-in-a-network/ 文章源自运维生存时间-https://www.ttlsa.com/php/php-to-determine-whether-ip-in-a-network/
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
评论