changeset 1051:2f1173c986e6 draft

[contrib/quicktun.socks4a] enjoy
author d3v11 <d3v11@d3v11.ano>
date Sun, 04 Nov 2012 12:18:53 +0000
parents 17a6ba440b0f
children 004034faf019
files contrib/quicktun.socks4a/README contrib/quicktun.socks4a/quicktun.socks4a contrib/quicktun.socks4a/run
diffstat 3 files changed, 151 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/quicktun.socks4a/README	Sun Nov 04 12:18:53 2012 +0000
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/quicktun.socks4a/quicktun.socks4a	Sun Nov 04 12:18:53 2012 +0000
@@ -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(                                                 )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/quicktun.socks4a/run	Sun Nov 04 12:18:53 2012 +0000
@@ -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