From 4631f2223bfd726f13b45360a4a2f40b1867a4c8 Mon Sep 17 00:00:00 2001 From: shortcutme Date: Tue, 29 Jan 2019 02:59:15 +0100 Subject: [PATCH] Add public ips from local adapters to external ip list --- src/File/FileServer.py | 11 +++++++++++ src/util/helper.py | 30 +++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/File/FileServer.py b/src/File/FileServer.py index 8867c883..b02adf21 100644 --- a/src/File/FileServer.py +++ b/src/File/FileServer.py @@ -193,6 +193,17 @@ class FileServer(ConnectionServer): self.log.info("Server port opened ipv4: %s, ipv6: %s" % (res_ipv4["opened"], res_ipv6["opened"])) res = {"ipv4": res_ipv4["opened"], "ipv6": res_ipv6["opened"]} + + # Add external IPs from local interfaces + interface_ips = helper.getInterfaceIps("ipv4") + if "ipv6" in self.supported_ip_types: + interface_ips += helper.getInterfaceIps("ipv6") + for ip in interface_ips: + if not helper.isPrivateIp(ip) and ip not in self.ip_external_list: + self.ip_external_list.append(ip) + SiteManager.peer_blacklist.append((ip, self.port)) + self.log.debug("External ip found on interfaces: %s" % ip) + self.port_opened.update(res) if self.ui_server: diff --git a/src/util/helper.py b/src/util/helper.py index 22bbf66d..6ebeee72 100644 --- a/src/util/helper.py +++ b/src/util/helper.py @@ -263,9 +263,33 @@ def getIpType(ip): return "ipv4" -def createSocket(ip): +def createSocket(ip, sock_type=socket.SOCK_STREAM): ip_type = getIpType(ip) if ip_type == "ipv6": - return socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + return socket.socket(socket.AF_INET6, sock_type) else: - return socket.socket(socket.AF_INET, socket.SOCK_STREAM) + return socket.socket(socket.AF_INET, sock_type) + + +def getInterfaceIps(ip_type="ipv4"): + res = [] + if ip_type == "ipv6": + test_ips = ["ff0e::c", "2606:4700:4700::1111"] + else: + test_ips = ['239.255.255.250', "8.8.8.8"] + + for test_ip in test_ips: + try: + s = createSocket(test_ip, sock_type=socket.SOCK_DGRAM) + s.connect((test_ip, 1)) + res.append(s.getsockname()[0]) + except: + pass + + try: + res += [ip[4][0] for ip in socket.getaddrinfo(socket.gethostname(), 1)] + except: + pass + + res = [re.sub("%.*", "", ip) for ip in res if getIpType(ip) == ip_type] + return list(set(res))