无限星辰工作室-客户无限互联网动力之源
标题:
PHP获取客户端ip后进行ipv4地址段匹配函数
[打印本页]
作者:
crx349
时间:
昨天 16:29
标题:
PHP获取客户端ip后进行ipv4地址段匹配函数
/**
* 检查IP是否在CIDR范围内
* @param string $ip 要检查的IP地址
* @param string $cidr CIDR格式,如"101.226.103.0/25"
* @return bool
*/
function ipInCIDR($ip, $cidr) {
list($subnet, $bits) = explode('/', $cidr);
// 将IP地址转换为32位整数
$ip = ip2long($ip);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
return ($ip & $mask) == ($subnet & $mask);
}
/**
* 验证IP地址格式
* @param string $ip IP地址
* @return bool
*/
function isValidIP($ip) {
return filter_var($ip, FILTER_VALIDATE_IP) !== false;
}
/**
* 完整的IP匹配流程
* @param string $cidr CIDR格式
* @return bool
*/
function checkClientIPInCIDR($cidr) {
// 获取客户端IP
$client_ip = getClientIP();
// 验证IP格式
if (!isValidIP($client_ip)) {
return false;
}
// 检查IP是否在CIDR范围内
return ipInCIDR($client_ip, $cidr);
}
复制代码
// 使用示例
$cidr_range = "101.226.103.0/25";
$client_ip = getClientIP();
echo "客户端IP: " . $client_ip . "\n";
echo "CIDR范围: " . $cidr_range . "\n";
if (checkClientIPInCIDR($cidr_range)) {
echo "IP地址在指定范围内\n";
} else {
echo "IP地址不在指定范围内\n";
}
// 测试特定IP
$test_ip = "101.226.103.50";
if (ipInCIDR($test_ip, $cidr_range)) {
echo "测试IP {$test_ip} 在范围内\n";
} else {
echo "测试IP {$test_ip} 不在范围内\n";
}
复制代码
欢迎光临 无限星辰工作室-客户无限互联网动力之源 (https://www.xmspace.net/)
Powered by Discuz! X3.4