eb94df6428808afc74445a3c6433912982e4de75

Author
Bryan Lee <doslby@gmail.com>
Committer
GitHub <noreply@github.com>
Date

Message

feat(shell-proxy): support SOCKS protocol based on URI scheme (#10069)

Diff

 1diff --git a/plugins/shell-proxy/ssh-proxy.py b/plugins/shell-proxy/ssh-proxy.py
 2index 5efd5fd2184885d67e2f20caf681516bafe0e2f2..6773a77bc0d14620ba009f4952f13972613f9c5d 100755
 3--- a/plugins/shell-proxy/ssh-proxy.py
 4+++ b/plugins/shell-proxy/ssh-proxy.py
 5@@ -2,15 +2,30 @@
 6 import os
 7 import subprocess
 8 import sys
 9-import urllib.parse
10+from urllib.parse import urlparse
11 
12 proxy = next(os.environ[_] for _ in ("HTTP_PROXY", "HTTPS_PROXY") if _ in os.environ)
13+
14+parsed = urlparse(proxy)
15+
16+proxy_protocols = {
17+    "http": "connect",
18+    "https": "connect",
19+    "socks": "5",
20+    "socks5": "5",
21+    "socks4": "4",
22+    "socks4a": "4",
23+}
24+
25+if parsed.scheme not in proxy_protocols:
26+    raise TypeError('unsupported proxy protocol: "{}"'.format(parsed.scheme))
27+
28 argv = [
29     "nc",
30     "-X",
31-    "connect",
32+    proxy_protocols[parsed.scheme], # Supported protocols are 4 (SOCKS v4), 5 (SOCKS v5) and connect (HTTP proxy). Default SOCKS v5 is used.
33     "-x",
34-    urllib.parse.urlparse(proxy).netloc,  # proxy-host:proxy-port
35+    parsed.netloc,  # proxy-host:proxy-port
36     sys.argv[1],  # host
37     sys.argv[2],  # port
38 ]