From 060368e93dc93778e34ae44d029b5bc6ce3f3f8e Mon Sep 17 00:00:00 2001 From: ed Date: Fri, 1 May 2020 02:17:59 +0200 Subject: [PATCH] some boxes on 10.x.x.x/8 would crash --- .vscode/launch.json | 2 +- copyparty/httpconn.py | 17 ++++++++++++++++- copyparty/tcpsrv.py | 24 ++++++++++++++++++------ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index f5ec519b..7aed04c2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -15,7 +15,7 @@ "-a", "ed:wark", "-v", - "/home/ed/inc:inc:r:aed" + "srv::r:aed" ] }, { diff --git a/copyparty/httpconn.py b/copyparty/httpconn.py index bca54b8f..6e4135a8 100644 --- a/copyparty/httpconn.py +++ b/copyparty/httpconn.py @@ -2,9 +2,24 @@ from __future__ import print_function, unicode_literals import os +import sys import ssl import socket -import jinja2 + +try: + import jinja2 +except ImportError: + print( + """\033[1;31m + you do not have jinja2 installed,\033[33m + choose one of these:\033[0m + * apt install python-jinja2 + * python3 -m pip install --user jinja2 + * (try another python version, if you have one) + * (try copyparty.sfx instead) +""" + ) + sys.exit(1) from .__init__ import E from .util import Unrecv diff --git a/copyparty/tcpsrv.py b/copyparty/tcpsrv.py index 29e5f349..9baa0d36 100644 --- a/copyparty/tcpsrv.py +++ b/copyparty/tcpsrv.py @@ -92,12 +92,24 @@ class TcpSrv(object): default_route = None s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - try: - s.connect(("10.255.255.255", 1)) - default_route = s.getsockname()[0] - except (OSError, socket.error) as ex: - if ex.errno not in [101, 10065]: - raise + for ip in [ + "10.255.255.255", + "172.31.255.255", + "192.168.255.255", + "239.255.255.255", + # could add 1.1.1.1 as a final fallback + # but external connections is kinshi + ]: + try: + s.connect((ip, 1)) + # raise OSError(13, "a") + default_route = s.getsockname()[0] + break + except (OSError, socket.error) as ex: + if ex.errno == 13: + self.log("tcpsrv", "eaccess {} (trying next)".format(ip)) + elif ex.errno not in [101, 10065]: + raise s.close()