Unverified Commit 60ed840f authored by Philipp Winter's avatar Philipp Winter
Browse files

Rejection-sample randomly-generated v4 addresses.

So far, we generated completely random IPv4 addresses which would
sometimes contain multicast addresses.  This patch adds rejection
sampling, as we're already doing it for IPv6 addresses.
parent 39fa0b07
Loading
Loading
Loading
Loading
+7 −11
Original line number Diff line number Diff line
@@ -117,9 +117,12 @@ def get_hex_string(size):
    return hexstr


def get_random_ipv6_addr():
def get_random_addr(ip_version=4):
    valid_addr = None
    while not valid_addr:
        if ip_version == 4:
            maybe = ipaddress.IPv4Address(random.getrandbits(32))
        else:
            maybe = ipaddress.IPv6Address(random.getrandbits(128))
        valid = check_ip_validity(maybe)
        if valid:
@@ -128,13 +131,6 @@ def get_random_ipv6_addr():
    return str(valid_addr)


def get_random_ipv4_addr():
    return "%i.%i.%i.%i" % (random.randint(0, 255),
                            random.randint(0, 255),
                            random.randint(0, 255),
                            random.randint(0, 255))


def get_protocol(tor_version):
    line = ""
    if tor_version is not None:
@@ -198,8 +194,8 @@ def create_server_desc(signing_key):
    timestamp = make_timestamp(variation=True, period=36)

    server_desc = RelayDescriptor.create({
        "router": "%s %s %s 0 0" % (nickname, get_random_ipv4_addr(), port),
        "or-address": "[%s]:%s" % (get_random_ipv6_addr(), port-1),
        "router": "%s %s %s 0 0" % (nickname, get_random_addr(ip_version=4), port),
        "or-address": "[%s]:%s" % (get_random_addr(ip_version=6), port-1),
        "platform": "Tor %s on Linux" % tor_version,
        get_protocol(tor_version): "",
        "published": timestamp,