From 10735c2fbd9aed44ebce10ea0053e417d7dae60a Mon Sep 17 00:00:00 2001 From: qwj Date: Sun, 27 Sep 2020 12:47:13 +0800 Subject: [PATCH 1/2] fix ipv6 issue --- pproxy/__doc__.py | 2 +- pproxy/server.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pproxy/__doc__.py b/pproxy/__doc__.py index 1fae0bb..6534173 100644 --- a/pproxy/__doc__.py +++ b/pproxy/__doc__.py @@ -1,5 +1,5 @@ __title__ = "pproxy" -__version__ = "2.3.5" +__version__ = "2.3.6" __license__ = "MIT" __description__ = "Proxy server that can tunnel among remote servers by regex rules." __keywords__ = "proxy socks http shadowsocks shadowsocksr ssr redirect pf tunnel cipher ssl udp" diff --git a/pproxy/server.py b/pproxy/server.py index f7dca0e..7fefe32 100644 --- a/pproxy/server.py +++ b/pproxy/server.py @@ -474,7 +474,7 @@ def compile(cls, uri, relay=None): cipher.plugins.append(plugin) match = cls.compile_rule(url.query) if url.query else None if loc: - host_name, _, port = loc.partition(':') + host_name, _, port = loc.rpartition(':') port = int(port) if port else (22 if 'ssh' in rawprotos else 8080) else: host_name = port = None From 7fccf8dd62204f34b0aa3a70fc568fd6ddff7728 Mon Sep 17 00:00:00 2001 From: qwj Date: Sun, 27 Sep 2020 14:58:48 +0800 Subject: [PATCH 2/2] add debug option --- pproxy/__doc__.py | 2 +- pproxy/server.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pproxy/__doc__.py b/pproxy/__doc__.py index 6534173..4a230fd 100644 --- a/pproxy/__doc__.py +++ b/pproxy/__doc__.py @@ -1,5 +1,5 @@ __title__ = "pproxy" -__version__ = "2.3.6" +__version__ = "2.3.7" __license__ = "MIT" __description__ = "Proxy server that can tunnel among remote servers by regex rules." __keywords__ = "proxy socks http shadowsocks shadowsocksr ssr redirect pf tunnel cipher ssl udp" diff --git a/pproxy/server.py b/pproxy/server.py index 7fefe32..8bba08a 100644 --- a/pproxy/server.py +++ b/pproxy/server.py @@ -51,7 +51,7 @@ def schedule(rserver, salgorithm, host_name, port): else: raise Exception('Unknown scheduling algorithm') #Unreachable -async def stream_handler(reader, writer, unix, lbind, protos, rserver, cipher, sslserver, authtime=86400*30, block=None, salgorithm='fa', verbose=DUMMY, modstat=lambda r,h:lambda i:DUMMY, **kwargs): +async def stream_handler(reader, writer, unix, lbind, protos, rserver, cipher, sslserver, debug=0, authtime=86400*30, block=None, salgorithm='fa', verbose=DUMMY, modstat=lambda r,h:lambda i:DUMMY, **kwargs): try: reader, writer = proto.sslwrap(reader, writer, sslserver, True, None, verbose) if unix: @@ -92,6 +92,8 @@ async def stream_handler(reader, writer, unix, lbind, protos, rserver, cipher, s verbose(f'{str(ex) or "Unsupported protocol"} from {remote_ip}') try: writer.close() except Exception: pass + if debug: + raise async def reuse_stream_handler(reader, writer, unix, lbind, protos, rserver, urserver, block, cipher, salgorithm, verbose=DUMMY, modstat=lambda r,h:lambda i:DUMMY, **kwargs): try: @@ -531,6 +533,7 @@ def main(): parser.add_argument('-b', dest='block', type=ProxyURI.compile_rule, help='block regex rules') parser.add_argument('-a', dest='alived', default=0, type=int, help='interval to check remote alive (default: no check)') parser.add_argument('-s', dest='salgorithm', default='fa', choices=('fa', 'rr', 'rc', 'lc'), help='scheduling algorithm (default: first_available)') + parser.add_argument('-d', dest='debug', action='count', help='turn on debug to see tracebacks (default: no debug)') parser.add_argument('-v', dest='v', action='count', help='print verbose output') parser.add_argument('--ssl', dest='sslfile', help='certfile[,keyfile] if server listen in ssl mode') parser.add_argument('--pac', help='http PAC path')