CIDR 을 Start ~ End 로 보여주는 코드를 작성했다.
서핑해서 찾아서 좀 수정했는데..
그럭저럭 잘 확인해준다...
<?php
function Usage() {
global $argv;
printf("Usage : php %s [CIDR]\n", $argv[0]);
printf("ex) php %s 192.168.5.0/24\n", $argv[0]);
exit();
}
function cidrToRange($cidr) {
$cidr = explode('/', $cidr);
$ptnIpAddress = "/^([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/";
if (!preg_match($ptnIpAddress, $cidr[0]) || (int)$cidr[1] < 0 || (int)$cidr[1] > 32) {
return false;
}
$range = array();
$range["start"] = long2ip(ip2long($cidr[0]) & (-1 << (32 - (int)$cidr[1])));
$range["end"] = long2ip(ip2long($range["start"]) + pow(2, (32 - (int)$cidr[1])) - 1);
$range["netmask"] = long2ip(-1 << (32 - (int)$cidr[1]));
return $range;
}
$aRange = cidrToRange($argv[1]);
if (!$aRange) Usage();
foreach ($aRange as $key => $value) {
printf("%-15s%-15s\n", $key, $value);
}
?>
댓글을 달아 주세요