Browse Source

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

Bryan Lee 2 years ago
parent
commit
eb94df6428
1 changed files with 18 additions and 3 deletions
  1. 18 3
      plugins/shell-proxy/ssh-proxy.py

+ 18 - 3
plugins/shell-proxy/ssh-proxy.py

@@ -2,15 +2,30 @@
 import os
 import subprocess
 import sys
-import urllib.parse
+from urllib.parse import urlparse
 
 proxy = next(os.environ[_] for _ in ("HTTP_PROXY", "HTTPS_PROXY") if _ in os.environ)
+
+parsed = urlparse(proxy)
+
+proxy_protocols = {
+    "http": "connect",
+    "https": "connect",
+    "socks": "5",
+    "socks5": "5",
+    "socks4": "4",
+    "socks4a": "4",
+}
+
+if parsed.scheme not in proxy_protocols:
+    raise TypeError('unsupported proxy protocol: "{}"'.format(parsed.scheme))
+
 argv = [
     "nc",
     "-X",
-    "connect",
+    proxy_protocols[parsed.scheme], # Supported protocols are 4 (SOCKS v4), 5 (SOCKS v5) and connect (HTTP proxy). Default SOCKS v5 is used.
     "-x",
-    urllib.parse.urlparse(proxy).netloc,  # proxy-host:proxy-port
+    parsed.netloc,  # proxy-host:proxy-port
     sys.argv[1],  # host
     sys.argv[2],  # port
 ]