commit 60ed840f3882f80b81a984d419cc7f78d1c96cfb Author: Philipp Winter phw@nymity.ch Date: Tue Feb 11 16:28:33 2020 -0800
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. --- scripts/create_descriptors | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/scripts/create_descriptors b/scripts/create_descriptors index 0b9d26d..60022db 100755 --- a/scripts/create_descriptors +++ b/scripts/create_descriptors @@ -117,10 +117,13 @@ 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: - maybe = ipaddress.IPv6Address(random.getrandbits(128)) + if ip_version == 4: + maybe = ipaddress.IPv4Address(random.getrandbits(32)) + else: + maybe = ipaddress.IPv6Address(random.getrandbits(128)) valid = check_ip_validity(maybe) if valid: valid_addr = maybe @@ -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,