PYTHON   37
convertip
Guest on 27th August 2023 05:59:53 AM


  1. #!/usr/bin/env python
  2.  
  3. import sys
  4. import re
  5.  
  6. def ip2int(ip) :
  7.         ret = 0
  8.         match = re.match("(\d*)\.(\d*)\.(\d*)\.(\d*)", ip)
  9.         if not match : return 0
  10.         for i in xrange(4) : ret = (ret << 8) + int(match.groups()[i])
  11.         return ret
  12.  
  13. def int2ip(ipnum) :
  14.         ip1 = ipnum >> 24
  15.         ip2 = ipnum >> 16 & 0xFF
  16.         ip3 = ipnum >> 8 & 0xFF
  17.         ip4 = ipnum & 0xFF
  18.         return "%d.%d.%d.%d" % (ip1, ip2, ip3, ip4)
  19.  
  20. def printrange(startip, endip) :
  21.         bits = 1
  22.         mask = 1
  23.         while bits < 32 :
  24.                 newip = startip | mask
  25.                 if (newip>endip) or (((startip>>bits) << bits) != startip) :
  26.                         bits = bits - 1
  27.                         mask = mask >> 1
  28.                         break
  29.                 bits = bits + 1
  30.                 mask = (mask<<1) + 1
  31.         newip = startip | mask
  32.         bits = 32 - bits
  33.         print "%s/%d" % (int2ip(startip), bits)
  34.         if newip < endip :
  35.                 printrange(newip + 1, endip)
  36.  
  37. while 1 :
  38.         line = sys.stdin.readline().strip()
  39.         if not line : break
  40.         chars = line.split(" ")
  41.         print "#%s - %s" % (chars[0], chars[1])
  42.         ip1 = ip2int(chars[0])
  43.         ip2 = ip2int(chars[1])
  44.         printrange(ip1, ip2)

Raw Paste

Login or Register to edit or fork this paste. It's free.