summaryrefslogtreecommitdiff
path: root/contrib/quicktun.socks4a
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/quicktun.socks4a')
-rw-r--r--contrib/quicktun.socks4a/README12
-rwxr-xr-xcontrib/quicktun.socks4a/quicktun.socks4a111
-rw-r--r--contrib/quicktun.socks4a/run28
3 files changed, 151 insertions, 0 deletions
diff --git a/contrib/quicktun.socks4a/README b/contrib/quicktun.socks4a/README
new file mode 100644
index 0000000..29a4359
--- /dev/null
+++ b/contrib/quicktun.socks4a/README
@@ -0,0 +1,12 @@
+hacking quicktun through socks4a:
+ peer one should set REMOTE_FLOAT = 0
+ peer two should set REMOTE_FLOAT = 1
+
+ i've never actually tested this. but
+ it should "just work" with minimal
+ shit. if it's really that bad you
+ can complain to /relayhell/d3v11.
+
+depends:
+ quicktun.raw, socat, daemontools,
+ a lot of fucking patience
diff --git a/contrib/quicktun.socks4a/quicktun.socks4a b/contrib/quicktun.socks4a/quicktun.socks4a
new file mode 100755
index 0000000..c6d1947
--- /dev/null
+++ b/contrib/quicktun.socks4a/quicktun.socks4a
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+import subprocess, socket, select, fcntl, sys, os
+
+DEBUG = os.getenv( 'DEBUG' ,'1' )
+TUN_MODE = os.getenv( 'TUN_MODE' ,'1' )
+INTERFACE = os.getenv( 'ppp-tortun' ,'1' )
+REMOTE_FLOAT = int(os.getenv('REMOTE_FLOAT' ,'1' ))
+
+LOCAL_ADDRESS = os.getenv( 'LOCAL_ADDRESS' ,'127.0.0.1' )
+LOCAL_PORT = int(os.getenv('LOCAL_PORT' ,'2998' ))
+
+REMOTE_ADDRESS = os.getenv( 'REMOTE_ADDRESS','127.0.0.2' )
+REMOTE_PORT = int(os.getenv('REMOTE_PORT' ,'2998' ))
+
+DST_ADDRESS = os.getenv( 'DST_ADDRESS' ,'127.0.0.3' )
+DST_PORT = os.getenv( 'DST_PORT' ,'2998' )
+
+SOCKS_ADDRESS = os.getenv( 'LOCAL_ADDRESS' ,'127.0.0.1' )
+SOCKS_PORT = os.getenv( 'LOCAL_PORT' ,'9050' )
+
+tcp = socket.socket(
+ socket.AF_INET,socket.SOCK_STREAM)
+tcp.setsockopt (socket.SOL_SOCKET,socket.SO_REUSEADDR,1 )
+tcp.setblocking (0 )
+tcp.bind ((LOCAL_ADDRESS,LOCAL_PORT ))
+tcp.listen (1 )
+tcp_poll = select.poll( )
+tcp_poll.register(tcp.fileno(),select.POLLIN|select.POLLPRI )
+
+udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
+udp.setsockopt (socket.SOL_SOCKET,socket.SO_REUSEADDR,1 )
+udp.setblocking (0 )
+udp.bind ((REMOTE_ADDRESS,REMOTE_PORT ))
+udp_poll = select.poll( )
+udp_poll.register(udp.fileno(),select.POLLIN|select.POLLPRI )
+
+if REMOTE_FLOAT==0:
+ tun = subprocess.Popen (
+ [ 'socat','stdio','socks4a:'+SOCKS_ADDRESS+':'
+ +DST_ADDRESS+':'+DST_PORT
+ +',socksport='+SOCKS_PORT
+ ],
+ stdout = subprocess.PIPE,
+ stdin = subprocess.PIPE, )
+ tun_stdout = tun.stdout.fileno ( )
+ tun_stdin = tun.stdin.fileno ( )
+ tun_poll = select.poll ( )
+ tun_poll.register (
+ tun.stdout.fileno(), select.POLLIN|select.POLLPRI)
+
+while REMOTE_FLOAT==1:
+ if len(tcp_poll.poll(65536))>0:
+ tun = tcp.accept ()[0]
+ tun_stdout = tun.fileno ( )
+ tun_stdin = tun.fileno ( )
+ tun_poll = select.poll ( )
+ tun_poll.register (
+ tun.fileno(), select.POLLIN|select.POLLPRI)
+ break
+
+fcntl.fcntl(tun_stdin,fcntl.F_SETFL,fcntl.fcntl(
+ tun_stdin,fcntl.F_GETFL)&~os.O_NONBLOCK|os.O_NONBLOCK)
+fcntl.fcntl(tun_stdout,fcntl.F_SETFL,fcntl.fcntl(
+ tun_stdout,fcntl.F_GETFL)&~os.O_NONBLOCK|os.O_NONBLOCK)
+
+tun = subprocess.Popen(['/usr/sbin/quicktun.raw'],
+stdout = subprocess.PIPE,
+stdin = subprocess.PIPE )
+
+recvq = str( )
+sendq = str( )
+
+while 1:
+ if len(udp_poll.poll(128))>0:
+ buffer = str( )
+ buffer = udp.recv(1024 )
+ if len(buffer)==0:
+ break
+ sendq = sendq + buffer
+
+ if len(tun_poll.poll(128))>0:
+ buffer = str( )
+ buffer = os.read(tun_stdout,1024 )
+ if len(buffer)==0:
+ break
+ recvq = recvq + buffer
+
+ if len(sendq)>0:
+ try:
+ sendq = sendq[os.write(tun_stdin,sendq[:1024] )
+ :]
+ except OSError as ex:
+ if ex.errno!=11:
+ break
+
+ if len(recvq)>0:
+ try:
+ recvq = recvq[udp.sendto(recvq[:1024],
+ (LOCAL_ADDRESS,LOCAL_PORT ))
+ :]
+ except OSError as ex:
+ if ex.errno!=11:
+ break
+
+ if len(sendq)>65536*128:
+ break
+
+ if len(recvq)>65536*128:
+ break
+
+tun.terminate( )
diff --git a/contrib/quicktun.socks4a/run b/contrib/quicktun.socks4a/run
new file mode 100644
index 0000000..181f2cd
--- /dev/null
+++ b/contrib/quicktun.socks4a/run
@@ -0,0 +1,28 @@
+#!/bin/sh -e
+
+export DEBUG='1'
+export TUN_MODE='1'
+export INTERFACE='ppp-tortun'
+export REMOTE_FLOAT='1'
+
+export LOCAL_ADDRESS='127.0.0.1'
+export LOCAL_PORT='2998'
+
+export REMOTE_ADDRESS='127.0.0.2'
+export REMOTE_PORT='2998'
+
+export DST_ADDRESS='127.0.0.3'
+export DST_PORT='2998'
+
+export SOCKS_ADDRESS='127.0.0.1'
+export SOCKS_PORT='9050'
+
+(
+ sleep 8
+ ip addr add $LOCAL_PEER_ADDRESS peer $REMOTE_PEER_ADDRESS/32 dev $INTERFACE scope link
+ ip addr add $LOCAL_ROUTER_ADDRESS/32 dev $INTERFACE scope global
+ ip link set dev $INTERFACE up
+ ping -c 1 -I $INTERFACE $REMOTE_PEER_ADDRESS -r -w 5 >/dev/null 2>&1
+) &
+
+exec "`pwd`"/quicktun.socks4a