mirror of https://github.com/MISP/MISP
43 lines
1.1 KiB
PHP
43 lines
1.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* CIDR conversion tool
|
|
*/
|
|
|
|
class CidrComponent extends Component {
|
|
public function CIDR($cidr) {
|
|
list($address, $prefix) = explode('/', $cidr, 2);
|
|
$address = decbin(ip2long($address));
|
|
$address = substr("00000000000000000000000000000000",0,32 - strlen($address)) . $address;
|
|
$min = '';
|
|
$max = '';
|
|
for ($i = 0; $i < $prefix; $i++) {
|
|
$min .= $address[$i];
|
|
}
|
|
$max = $min;
|
|
$min = str_pad($min, 32, '0', STR_PAD_RIGHT);
|
|
$max = str_pad($max, 32, '1', STR_PAD_RIGHT);
|
|
$minArray = array();
|
|
$maxArray = array();
|
|
$searchTermLeft = '';
|
|
$searchTermMin = 0;
|
|
$searchTermMax = 0;
|
|
$results = array();
|
|
for ($i = 0; $i < 4; $i++) {
|
|
$minArray[] = bindec(substr($min, ($i*8), 8));
|
|
$maxArray[] = bindec(substr($max, ($i*8), 8));
|
|
if ($minArray[$i] === $maxArray[$i]) $searchTermLeft .= $minArray[$i] . '.';
|
|
else {
|
|
$searchTermMin = $minArray[$i];
|
|
$searchTermMax = $maxArray[$i];
|
|
break;
|
|
}
|
|
}
|
|
$length = $i;
|
|
for ($i = 0; $i < ($searchTermMax - $searchTermMin + 1); $i++) {
|
|
$results[$i] = $searchTermLeft . ($searchTermMin + $i);
|
|
if ($length < 3) $results[$i] .= '.%';
|
|
}
|
|
return $results;
|
|
}
|
|
} |