无限星辰工作室-客户无限互联网动力之源

标题: PHP获取客户端ip后进行ipv4地址段匹配函数 [打印本页]

作者: crx349    时间: 昨天 16:29
标题: PHP获取客户端ip后进行ipv4地址段匹配函数

  1. /**
  2. * 检查IP是否在CIDR范围内
  3. * @param string $ip 要检查的IP地址
  4. * @param string $cidr CIDR格式,如"101.226.103.0/25"
  5. * @return bool
  6. */
  7. function ipInCIDR($ip, $cidr) {
  8.     list($subnet, $bits) = explode('/', $cidr);
  9.    
  10.     // 将IP地址转换为32位整数
  11.     $ip = ip2long($ip);
  12.     $subnet = ip2long($subnet);
  13.     $mask = -1 << (32 - $bits);
  14.    
  15.     return ($ip & $mask) == ($subnet & $mask);
  16. }

  17. /**
  18. * 验证IP地址格式
  19. * @param string $ip IP地址
  20. * @return bool
  21. */
  22. function isValidIP($ip) {
  23.     return filter_var($ip, FILTER_VALIDATE_IP) !== false;
  24. }

  25. /**
  26. * 完整的IP匹配流程
  27. * @param string $cidr CIDR格式
  28. * @return bool
  29. */
  30. function checkClientIPInCIDR($cidr) {
  31.     // 获取客户端IP
  32.     $client_ip = getClientIP();
  33.    
  34.     // 验证IP格式
  35.     if (!isValidIP($client_ip)) {
  36.         return false;
  37.     }
  38.    
  39.     // 检查IP是否在CIDR范围内
  40.     return ipInCIDR($client_ip, $cidr);
  41. }
复制代码

  1. // 使用示例
  2. $cidr_range = "101.226.103.0/25";
  3. $client_ip = getClientIP();

  4. echo "客户端IP: " . $client_ip . "\n";
  5. echo "CIDR范围: " . $cidr_range . "\n";

  6. if (checkClientIPInCIDR($cidr_range)) {
  7.     echo "IP地址在指定范围内\n";
  8. } else {
  9.     echo "IP地址不在指定范围内\n";
  10. }

  11. // 测试特定IP
  12. $test_ip = "101.226.103.50";
  13. if (ipInCIDR($test_ip, $cidr_range)) {
  14.     echo "测试IP {$test_ip} 在范围内\n";
  15. } else {
  16.     echo "测试IP {$test_ip} 不在范围内\n";
  17. }
复制代码





欢迎光临 无限星辰工作室-客户无限互联网动力之源 (https://www.xmspace.net/) Powered by Discuz! X3.4