Here is one pretty straightforward approach:
def ip_to_int(ip):
val = 0
for i, s in enumerate(ip.split('.')):
val += int(s) * 256 ** (3 - i)
return val
def int_to_ip(val):
octets = []
for i in range(4):
octets.append(str(val % 256))
val = val >> 8
return '.'.join(reversed(octets))
def findIPs(start, end):
for i in range(ip_to_int(start), ip_to_int(end) + 1):
yield int_to_ip(i)
Examples:
>>> list(findIPs('111.111.111.0', '111.111.111.3'))
['111.111.111.0', '111.111.111.1', '111.111.111.2', '111.111.111.3']
>>> list(findIPs('111.111.111.254', '111.111.112.1'))
['111.111.111.254', '111.111.111.255', '111.111.112.0', '111.111.112.1']