Complete IPv4 Address Space
You can simply generate them yourself. They are simply representations of all integers up to $2^{32}$

Which format do you want the address? There are many ways to represent them according to your requirements, due to the fact that they are simply representation of a set of normal numbers:


standard dot-separated e.g. 192.168.0.1
unsigned int32 : e.g 3548551264
hex, dotted hex, octal bytes




You could generate them in Python like this:

def generate_ips(): 
    """Generate all possible IPv4 addresses, on by one""" 
    for i in range(255): 
        for j in range(255):
            for k in range(255):
                for l in range(255):
                    yield "{0}.{1}.{2}.{3}".format(i, j, k, l)


The you must loop on the generator function like this to actuall use the values:

for ip in generate_ips(): 
    print(ip) 

# output
0.0.0.0
0.0.0.1
0.0.0.2
0.0.0.3
0.0.0.4
0.0.0.5
0.0.0.6
0.0.0.7


I used a generator (with the yield keyword instead of saving all values in a list) because it will just give you one at a time and not consume all those Gb of memory that you mentioned!

If you want to store all values in a list for some reason, you can alter the function to append each IP address to a list, then return that:

def generate_ips():
    """Return a list of all possible IPv4 addresses"""
    all_ips = []
    for i in range(255):
        for j in range(255):
            for k in range(255):
                for l in range(255):
                    ip = "{0}.{1}.{2}.{3}".format(i, j, k, l)
                    all_ips.append(ip)
    return all_ips