Search code examples
pythonipv4

how to find all ip addresses between 2 ip addresses


Can anyone think of an algorithm to put all of the addresses between two others and put them in a list (using python)? For example:

findIPs('111.111.111.0', '111.111.111.3')

Should return ('111.111.111.0', '111.111.111.1', '111.111.111.2', '111.111.111.3'). My main problem arises from when corresponding blocks are identical otherwise I could just use nested for loops with the range function.


Solution

  • Python 3.3 with standard library ipaddress module / Python 3.2-, Python 2.x with ipaddr

    try:
        from ipaddress import ip_address
    except ImportError:
        from ipaddr import IPAddress as ip_address
    
    def findIPs(start, end):
        start = ip_address(start)
        end = ip_address(end)
        result = []
        while start <= end:
            result.append(str(start))
            start += 1
        return result
    
    print(findIPs('111.111.111.0', '111.111.111.3'))
    

    Python 3.2-, Python 2.x

    import struct
    import socket
    
    def findIPs(start, end):
        ipstruct = struct.Struct('>I')
        start, = ipstruct.unpack(socket.inet_aton(start))
        end, = ipstruct.unpack(socket.inet_aton(end))
        return [socket.inet_ntoa(ipstruct.pack(i)) for i in range(start, end+1)]
    
    print(findIPs('111.111.111.0', '111.111.111.3'))