Advertisement
Guest User

Скрипт для преобразования IP из Netmask в CIDR (для nmap)

a guest
May 14th, 2015
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.63 KB | None | 0 0
  1. <?php
  2. error_reporting (E_ALL);
  3.  
  4. //----------------------------------------------------------------------------------
  5. // Файл с диапазонами
  6. $fileIn = 'input.txt';
  7.  
  8. // Результирующий файл с диапазонами в формате CIDR, подходящем для nmap
  9. $fileOut = 'output.txt';
  10.  
  11. //----------------------------------------------------------------------------------
  12. /**
  13.  * @author phptuts
  14.  * @copyright 2012
  15.  * @link http://tutorialspots.com/
  16.  */
  17.  
  18. function cidr2ip($cidr)
  19. {
  20.     $ip_arr = explode('/', $cidr);
  21.     $start = ip2long($ip_arr[0]);
  22.     $nm = $ip_arr[1];
  23.     $num = pow(2, 32 - $nm);
  24.     $end = $start + $num - 1;
  25.     return array($ip_arr[0], long2ip($end));
  26. }
  27.  
  28. /**
  29.  * @author phptuts
  30.  * @copyright 2012
  31.  * @link http://tutorialspots.com/
  32.  */
  33.  
  34. function valid_ip_cidr($cidr, $must_cidr = false)
  35. {
  36.     if (!preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(\/[0-9]{1,2})?$/", $cidr))
  37.     {
  38.         $return = false;
  39.     } else
  40.     {
  41.         $return = true;
  42.     }
  43.     if ($return == true)
  44.     {
  45.         $parts = explode("/", $cidr);
  46.         $ip = $parts[0];
  47.         $netmask = $parts[1];
  48.         $octets = explode(".", $ip);
  49.         foreach ($octets as $octet)
  50.         {
  51.             if ($octet > 255)
  52.             {
  53.                 $return = false;
  54.             }
  55.         }
  56.         if ((($netmask != "") && ($netmask > 32) && !$must_cidr) || (($netmask == ""||$netmask > 32) && $must_cidr))
  57.         {
  58.             $return = false;
  59.         }
  60.     }
  61.     return $return;
  62. }
  63.  
  64. /**
  65.  * @author phptuts
  66.  * @copyright 2012
  67.  * @link http://tutorialspots.com/
  68.  */
  69.  
  70. function ip2cidr($ips)
  71. {
  72.     $return = array();
  73.     $num = ip2long($ips[1]) - ip2long($ips[0]) + 1;
  74.     $bin = decbin($num);
  75.  
  76.     $chunk = str_split($bin);
  77.     $chunk = array_reverse($chunk);
  78.     $start = 0;
  79.  
  80.     while ($start < count($chunk))
  81.     {
  82.         if ($chunk[$start] != 0)
  83.         {
  84.             $start_ip = isset($range) ? long2ip(ip2long($range[1]) + 1) : $ips[0];
  85.             $range = cidr2ip($start_ip . '/' . (32 - $start));
  86.             $return[] = $start_ip . '/' . (32 - $start);
  87.         }
  88.         $start++;
  89.     }
  90.     return $return;
  91. }
  92. //----------------------------------------------------------------------------------
  93. $strOut = '';
  94. $arr = file ($fileIn);
  95. foreach ($arr as $str)
  96. {
  97.     $range      = explode (' - ', $str);
  98.     $ips        = array ($range['0'], $range['1']);
  99.     $arrCidr    = ip2cidr ($ips);
  100.  
  101.     foreach ($arrCidr as $ip)
  102.     {
  103.         $strOut .= $ip . "\n";
  104.     }
  105. }
  106.  
  107. file_put_contents ($fileOut, $strOut);
  108. echo 'OK' . "\n\n\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement