summaryrefslogtreecommitdiff
path: root/dot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-06-03 19:56:39 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-06-03 19:56:39 +0800
commitca968c4e5040f1ff4b5b5e12d9312360d807dcc1 (patch)
tree9900920e8f566794560c1519678e344351d2803b /dot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py
parent5f3deaff0bf006a1a353e57b82ad48c0e8f143bc (diff)
added submodules, change . -> dot (see man stow --dotfiles)
Diffstat (limited to 'dot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py')
-rwxr-xr-xdot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/dot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py b/dot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py
new file mode 100755
index 00000000..a498c84b
--- /dev/null
+++ b/dot-oh-my-zsh/plugins/shell-proxy/ssh-proxy.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+import os
+import subprocess
+import sys
+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))
+
+def make_argv():
+ yield "nc"
+ if sys.platform == 'linux':
+ # caveats: macOS built-in netcat command not supported proxy-type
+ yield "-X" # --proxy-type
+ # Supported protocols are 4 (SOCKS v4), 5 (SOCKS v5) and connect (HTTP proxy).
+ # Default SOCKS v5 is used.
+ yield proxy_protocols[parsed.scheme]
+ yield "-x" # --proxy
+ yield parsed.netloc # proxy-host:proxy-port
+ yield sys.argv[1] # host
+ yield sys.argv[2] # port
+
+subprocess.call(make_argv())