From 3d653e023c6f1bc9a9efa9a209f6564fe8ae7150 Mon Sep 17 00:00:00 2001 From: Vangelis Banos Date: Mon, 16 Oct 2023 18:33:42 +0000 Subject: [PATCH 1/2] Add SOCKS proxy options Add options `--socks-proxy`, `--socks-proxy-username, `--socks-proxy-password`. If enabled, all traffic is routed throught the SOCKS proxy. --- warcprox/main.py | 10 ++++++++++ warcprox/mitmproxy.py | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/warcprox/main.py b/warcprox/main.py index 2ba41b3..9731cae 100644 --- a/warcprox/main.py +++ b/warcprox/main.py @@ -207,6 +207,16 @@ def _build_arg_parser(prog='warcprox', show_hidden=False): default=None, help=( 'host:port of tor socks proxy, used only to connect to ' '.onion sites')) + arg_parser.add_argument( + '--socks-proxy', dest='socks_proxy', + default=None, help= + 'host:port of socks proxy, used for all traffic if activated')) + arg_parser.add_argument( + '--socks-proxy-username', dest='socks_proxy_username', + default=None, help='optional socks proxy username') + arg_parser.add_argument( + '--socks-proxy-password', dest='socks_proxy_password', + default=None, help='optional socks proxy password') hidden.add_argument( '--socket-timeout', dest='socket_timeout', type=float, default=60, help=suppress( diff --git a/warcprox/mitmproxy.py b/warcprox/mitmproxy.py index a423a22..e6af7ac 100644 --- a/warcprox/mitmproxy.py +++ b/warcprox/mitmproxy.py @@ -256,6 +256,10 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler): _tmp_file_max_memory_size = 512 * 1024 onion_tor_socks_proxy_host = None onion_tor_socks_proxy_port = None + socks_proxy_host = None + socks_proxy_port = None + socks_proxy_username = None + socks_proxy_password = None def __init__(self, request, client_address, server): threading.current_thread().name = 'MitmProxyHandler(tid={},started={},client={}:{})'.format(warcprox.gettid(), datetime.datetime.utcnow().isoformat(), client_address[0], client_address[1]) @@ -314,6 +318,18 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler): port=self.onion_tor_socks_proxy_port, rdns=True) self._remote_server_conn.sock.settimeout(self._socket_timeout) self._remote_server_conn.sock.connect((self.hostname, int(self.port))) + elif self.socks_proxy_host and self.socks_proxy_port: + self.logger.info( + "using socks proxy at %s:%s to connect to %s", + self.socks_proxy_host, self.socks_proxy_port, self.hostname) + self._remote_server_conn.sock = socks.socksocket() + self._remote_server_conn.sock.set_proxy( + socks.SOCKS5, addr=self.socks_proxy_host, + port=self.socks_proxy_port, rdns=True, + username=self.socks_proxy_username, + password=self.socks_proxy_password) + self._remote_server_conn.sock.settimeout(self._socket_timeout) + self._remote_server_conn.sock.connect((self.hostname, int(self.port))) else: self._remote_server_conn.connect() remote_ip = self._remote_server_conn.sock.getpeername()[0] @@ -822,6 +838,14 @@ class SingleThreadedMitmProxy(http_server.HTTPServer): except ValueError: MitmProxyHandlerClass.onion_tor_socks_proxy_host = options.onion_tor_socks_proxy MitmProxyHandlerClass.onion_tor_socks_proxy_port = None + if options.socks_proxy: + host, port = options.socks_proxy.split(':') + MitmProxyHandlerClass.socks_proxy_host = host + MitmProxyHandlerClass.socks_proxy_port = int(port) + if options.socks_proxy_username: + MitmProxyHandlerClass.socks_proxy_username = options.socks_proxy_username + if options.socks_proxy_password: + MitmProxyHandlerClass.socks_proxy_password = options.socks_proxy_password if options.socket_timeout: MitmProxyHandlerClass._socket_timeout = options.socket_timeout From 9fd5a22502e8f327e85aa0cf8fecf1b9f0d646e1 Mon Sep 17 00:00:00 2001 From: Vangelis Banos Date: Tue, 17 Oct 2023 06:12:28 +0000 Subject: [PATCH 2/2] fix typo --- warcprox/main.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/warcprox/main.py b/warcprox/main.py index 9731cae..69f4a39 100644 --- a/warcprox/main.py +++ b/warcprox/main.py @@ -209,8 +209,7 @@ def _build_arg_parser(prog='warcprox', show_hidden=False): '.onion sites')) arg_parser.add_argument( '--socks-proxy', dest='socks_proxy', - default=None, help= - 'host:port of socks proxy, used for all traffic if activated')) + default=None, help='host:port of socks proxy, used for all traffic if activated') arg_parser.add_argument( '--socks-proxy-username', dest='socks_proxy_username', default=None, help='optional socks proxy username')