php – 查找给定的IP是否存在于CIDR中
发布时间:2020-12-13 13:12:52 所属栏目:PHP教程 来源:网络整理
导读:我使用尝试访问我的网站的$_SERVER [‘REMOTE_ADDR’]获取用户的IP地址.在我的数据库中,每个框都有不同的IDS和不同的CIDR条目.我想检查用户IP是否存在于任何CIDR中,而不是特定的框. 如果存在,那么他被允许进入,否则不允许. 假设用户IP是 127.0.0.1 假设框12
我使用尝试访问我的网站的$_SERVER [‘REMOTE_ADDR’]获取用户的IP地址.在我的数据库中,每个框都有不同的IDS和不同的CIDR条目.我想检查用户IP是否存在于任何CIDR中,而不是特定的框.
如果存在,那么他被允许进入,否则不允许. 假设用户IP是 127.0.0.1 假设框12的CIDR条目是 192.168.1.20/27 192.168.0.10/32 CIDR条目存储在数据库中的一列中 如果他来到这个范围内的IP,那么他应该被允许进入网站,否则不允许. 有什么想法吗? 谢谢
好的,请尝试以下5个简单步骤
1.将您的CIDR存储到数组中(从数据库读取数据;猜你知道如何得到这个) $cidrs = array( '192.168.1.20/27','192.168.0.10/32' ); 2.获取用户的IP(远程地址) $user_ip = $_SERVER['REMOTE_ADDR']; 3.添加此功能 function IPvsCIDR($user_ip,$cidr) { $parts = explode('/',$cidr); $ipc = explode('.',$parts[0]); foreach ($ipc as &$v) $v = str_pad(decbin($v),8,'0',STR_PAD_LEFT); $ipc = substr(join('',$ipc),$parts[1]); $ipu = explode('.',$user_ip); foreach ($ipu as &$v) $v = str_pad(decbin($v),STR_PAD_LEFT); $ipu = substr(join('',$ipu),$parts[1]); return $ipu == $ipc; } 4.比较用户的IP地址与$cidrs $validaddr = false; foreach ($cidrs as $addr) if (IPvsCIDR($user_ip,$addr)) { $validaddr = true; break; } 5.决定用户如何处理 if ($validaddr) { echo "CORRECT IP ADDRESS"; } else { echo "INCORRECT IP ADDRESS"; } 而已! 这个功能如何工作.它将CIDR地址部分(x.x.x.x)转换为二进制字符串,并获取前N个数字.然后,它与用户的IP执行相同的工作,并且检查值是否匹配. 示例2(功能完成) function testUserIP($user_ip,$cidrs) { $ipu = explode('.',STR_PAD_LEFT); $ipu = join('',$ipu); $res = false; foreach ($cidrs as $cidr) { $parts = explode('/',$cidr); $ipc = explode('.',$parts[0]); foreach ($ipc as &$v) $v = str_pad(decbin($v),STR_PAD_LEFT); $ipc = substr(join('',$parts[1]); $ipux = substr($ipu,$parts[1]); $res = ($ipc === $ipux); if ($res) break; } return $res; } 用法: $user_ip = $_SERVER['REMOTE_ADDR']; $cidrs = array('192.168.1.20/27','192.168.0.10/32'); if (testUserIP($user_ip,$cidrs)) { // user ip is ok } else { // access denied } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |