PHP:匹配范围介于两者之间的IP? (IPv4和IPv6)

时间:2016-01-08 11:08:15

标签: php ip range

使用inet_pton()函数来匹配特定范围内的IP是一个好主意吗?将它用于IPv4和IPv6是否很好?

例如:

$start = inet_pton('192.168.0.1');
$end = inet_pton('195.200.0.200');
$ip = inet_pton($_SERVER['REMOTE_ADDR']);

if($ip >= $start && $ip <= $end) {
       echo 'in range';
}
else {
echo 'not in range';
}

1 个答案:

答案 0 :(得分:1)

使用PHP的ip2long功能。它会将IPv4转换为数字。

试试这段代码: -

$start = ip2long('192.168.0.1');
$end = ip2long('195.200.0.200');
$ip = ip2long($_SERVER['REMOTE_ADDR']);

对于IPv4和IPv6地址,请使用此功能进行全局使用。

function ipaddress_to_ipnumber($ipaddress) {
    $pton = @inet_pton($ipaddress);
    if (!$pton) { return false; }
    $number = '';
    foreach (unpack('C*', $pton) as $byte) {
        $number .= str_pad(decbin($byte), 8, '0', STR_PAD_LEFT);
    }
    return base_convert(ltrim($number, '0'), 2, 10);
  }

$start = ipaddress_to_ipnumber("192.168.178.255");
$end = ipaddress_to_ipnumber('195.200.0.200');
$ip = ipaddress_to_ipnumber($_SERVER['REMOTE_ADDR']);