将ip短符号转换为CIDR符号

时间:2019-11-05 17:14:38

标签: php ip cidr

假设我下面有一个这样的列表(在$ ips数组中),其中包括简单的ip地址和短ip表示法样式的ip。

125.45.
201.35.1.
35.89.18.27
101.135.2
222.122
78.56.21.146

如何使用php将它们转换为ip连字符范围?

即结果应该是

125.45.0.0-125.45.255.255
201.35.1.0-201.35.1.255
35.89.18.27
101.135.2.0-101.135.2.255
222.122.0.0-222.122.255.255 
78.56.21.146

1 个答案:

答案 0 :(得分:1)

请注意,我这样做是一个有趣的实验。您的问题有点模糊,您自己也没有尝试这样做。话虽如此,该功能应该可以满足您的需求。让我解释一下它的作用:

第一件事,检查ip中的最后一个字符是否为点并将其删除。

第二,计算IP的范围数。

根据IP范围,使用switch/case语句(比if elseif恕我直言更清晰)来确定对字符串的处理方式。

最后定义开始范围和结束范围并将它们连接起来。

最后返回结果。

<?php

$ips = array();


$ips[0] = '125.45.';
$ips[1] = '201.35.1.';
$ips[2] = '101.135.2';
$ips[3] = '222.122';
$ips[4] = '78.56.21.146';


foreach($ips as $ip){

echo "\n\nNEW IP RANGE: " . convert_ip($ip) . "\n\n";

}

function convert_ip($ip){

$ip = rtrim($ip, '.');

$ip_count = count( explode('.', $ip) );

switch ($ip_count) {

    case 1:

        $starting_ip = $ip . '.0.0.0';

        $ending_ip = $ip . '.255.255.255';

        $return_ip = "$starting_ip-$ending_ip";

        break;
    case 2:

        $starting_ip = $ip . '.0.0';

        $ending_ip = $ip . '.255.255';

        $return_ip = "$starting_ip-$ending_ip";

        break;
    case 3:

        $starting_ip = $ip . '.0';

        $ending_ip = $ip . '.255';

        $return_ip = "$starting_ip-$ending_ip";

        break;
    case 4:

        $return_ip = $ip;

        break;

    default:
        $return_ip = 'Unknown';
}

return $return_ip;

}

?>
  

新IP范围:125.45.0.0-125.45.255.255

     

新IP范围:201.35.1.0-201.35.1.255

     

新IP范围:101.135.2.0-101.135.2.255

     

新IP范围:222.122.0.0-222.122.255.255

     

新IP范围:78.56.21.146