From 7bea9e2625ee90c2c7e92978f19b28f8bc261abe Mon Sep 17 00:00:00 2001 From: flower Date: Tue, 14 Jan 2020 15:07:26 +0100 Subject: [PATCH 1/4] python3 --- forwarder.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/forwarder.py b/forwarder.py index 756d27d..f770c70 100644 --- a/forwarder.py +++ b/forwarder.py @@ -27,16 +27,16 @@ def __init__(self, tor, client_socket, proxy): # Create a tor forwarder self.forwarder = TorForwarder(tor, proxy, self) - self.staged = "" + self.staged = bytearray() # recv wrapper def recv(self): # if the forwarder is ready if self.forwarder.connected > 2: # forward any staged data - if self.staged != "": + if len(self.staged) > 0: self.forwarder.send(self.staged) - self.staged = "" + self.staged = bytearray() # receive any new data and forward it else: data = self.client.recv(1024) @@ -45,7 +45,7 @@ def recv(self): self.forwarder.send(data) # stage data from client else: - self.staged += self.client.recv(1024) + self.staged.extend(self.client.recv(1024)) # call the forwarder receive wrapper def send(self): From 6bd72e4ea5ee75ebf2d1354ce711e70165b484de Mon Sep 17 00:00:00 2001 From: flower Date: Tue, 14 Jan 2020 15:07:53 +0100 Subject: [PATCH 2/4] python3 --- proxy.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/proxy.py b/proxy.py index 1d5c651..05ca554 100755 --- a/proxy.py +++ b/proxy.py @@ -1,5 +1,3 @@ -#!/usr/bin/python2 - # proxy.py # (C) 2013 jtripper # @@ -31,13 +29,13 @@ def handler(signum, frame): raise KeyboardInterrupt if len(sys.argv) != 2: - print "Usage: %s [start|stop|restart]" % sys.argv[0] + print("Usage: %s [start|stop|restart]" % sys.argv[0]) quit() if sys.argv[1] == "start": if os.path.exists(".proxy.pid"): - print " [*] Proxy already started, quitting! If it is not started, delete the lock file (.proxy.pid)." - quit() + print(" [*] Proxy already started, quitting! If it is not started, delete the lock file (.proxy.pid).") + os.remove(".proxy.pid") elif sys.argv[1] == "stop": if os.path.exists(".proxy.pid"): @@ -47,11 +45,11 @@ def handler(signum, frame): os.kill(pid, signal.SIGUSR1) os.remove(".proxy.pid") else: - print " [*] Proxy not running!" + print(" [*] Proxy not running!") quit() elif sys.argv[1] == "restart": - print " [*] Restarting proxy." + print(" [*] Restarting proxy.") if os.path.exists(".proxy.pid"): f = open(".proxy.pid") pid = int(f.readlines()[0]) @@ -62,31 +60,31 @@ def handler(signum, frame): proxy = (config.remote_host, config.remote_port) listen = (config.listener_host, config.listener_port) -print " [*] Starting tor instance." +print(" [*] Starting tor instance.") tor = Tor(1) -print " [*] Starting proxy." +print(" [*] Starting proxy.") listener = Listener(listen, proxy, tor) -print " [*] Proxy ready to accept connections." +print(" [*] Proxy ready to accept connections.") -if config.__dict__.has_key("set_user"): - print " [*] Dropping uid to %s" % config.set_user +if "set_user" in config.__dict__: + print(" [*] Dropping uid to %s" % config.set_user) try: os.setuid(getpwnam(config.set_user)[2]) except: - print " [*] Cannot drop priviledges! Quitting." + print(" [*] Cannot drop priviledges! Quitting.") quit() -if config.__dict__.has_key("set_group"): - print " [*] Dropping gid to %s" % config.set_group +if "set_group" in config.__dict__: + print(" [*] Dropping gid to %s" % config.set_group) try: os.setgid(getgrnam(config.set_user)[2]) except: - print " [*] Cannot drop privideges! Quitting." + print(" [*] Cannot drop privideges! Quitting.") quit() -if config.__dict__.has_key("daemon") and config.daemon: - print " [*] Backgrounding process." +if "daemon" in config.__dict__ and config.daemon: + print(" [*] Backgrounding process.") if os.fork() != 0: quit() if os.fork() != 0: quit() signal.signal(signal.SIGUSR1, handler) @@ -99,7 +97,7 @@ def handler(signum, frame): try: listener.manage_connections() except KeyboardInterrupt: - print " [*] Stopping tor instance and quitting." + print(" [*] Stopping tor instance and quitting.") if os.path.exists(".proxy.pid"): os.remove(".proxy.pid") From 761f25adfa308bd3715f67b9ec8925ff54c04160 Mon Sep 17 00:00:00 2001 From: flower Date: Tue, 14 Jan 2020 15:08:18 +0100 Subject: [PATCH 3/4] python3 --- tor.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tor.py b/tor.py index 49bf530..957efeb 100644 --- a/tor.py +++ b/tor.py @@ -52,7 +52,7 @@ def create_tor(self): torrc += "ControlPort %d\n" % self.control_port try: - os.mkdir(".tor%d" % self.tor_instance_number, 0700) + os.mkdir(".tor%d" % self.tor_instance_number, 0o700) except: pass @@ -96,12 +96,12 @@ def recv(self, size): def negotiate_socks(self): # First send socks handshake if self.connected == 0: - self.forwarder.send("\x05\x01\x00") + self.forwarder.send(b'\x05\x01\x00') # Wait for socks handshake response elif self.connected == 1: # If handshake failed restart - if self.forwarder.recv(2) != "\x05\x00": + if self.forwarder.recv(2) != b'\x05\x00': self.connected = 0 self.negotiate_socks() return @@ -109,12 +109,16 @@ def negotiate_socks(self): # Else send the host handshake port = struct.pack("!H", self.proxy[1]) length = chr(len(self.proxy[0])) - self.forwarder.send(("\x05\x01\x00\x03%s%s%s" % (length, self.proxy[0], port))) + s = bytearray(b'\x05\x01\x00\x03') + s.extend(length.encode('ascii')) + s.extend(self.proxy[0].encode('ascii')) + s.extend(port) + self.forwarder.send(s) # Wait for confirmation elif self.connected == 2: # If confirmation is bad, restart - if self.forwarder.recv(10) != "\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00": + if self.forwarder.recv(10) != b'\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00': self.connected = 0 self.negotiate_socks() return From 9ee46d728dafc7a49dac34f59510e28f9d971f7c Mon Sep 17 00:00:00 2001 From: flower Date: Tue, 14 Jan 2020 15:09:00 +0100 Subject: [PATCH 4/4] Dockerfile --- Dockerfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4d0908f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3-alpine + +ARG REMOTE_HOST +ARG REMOTE_PORT + +EXPOSE 8081 +WORKDIR /usr/src/app +COPY . . + +RUN sed -i -r "s/remote_host.*/remote_host = \"${REMOTE_HOST}\"/g" config.py && \ + sed -i -r "s/remote_port.*/remote_port = ${REMOTE_PORT}/g" config.py && \ + apk add --update tor && \ + rm -rf /var/cache/apk/* + +CMD [ "python", "proxy.py", "start" ]