From ddaab6fbbf92bc133cefe7690f0234b0b9b60038 Mon Sep 17 00:00:00 2001 From: clowwindy Date: Fri, 31 May 2013 23:43:47 +0800 Subject: [PATCH] local can listen at ::0 with -6 arg; bump 1.2.2 --- README.md | 2 +- local.py | 23 ++++++++--------------- server.py | 9 ++++++--- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 1519501..4e46801 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ shadowsocks =========== [![Build Status](https://travis-ci.org/clowwindy/shadowsocks.png)](https://travis-ci.org/clowwindy/shadowsocks) -Current version: 1.2.1 +Current version: 1.2.2 shadowsocks is a lightweight tunnel proxy which can help you get through firewalls diff --git a/local.py b/local.py index 603fc3a..7f385fa 100755 --- a/local.py +++ b/local.py @@ -131,15 +131,7 @@ class Socks5Server(SocketServer.StreamRequestHandler): reply += socket.inet_aton('0.0.0.0') + struct.pack(">H", 2222) self.wfile.write(reply) # reply immediately - if '-6' in sys.argv[1:]: - remote = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - remote.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - remote.connect((SERVER, REMOTE_PORT, 0, 0)) - else: - remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - remote.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - remote.connect((SERVER, REMOTE_PORT)) - + remote = socket.create_connection((SERVER, REMOTE_PORT)) self.send_encrypt(remote, addr_to_send) logging.info('connecting %s:%d' % (addr, port[0])) except socket.error, e: @@ -152,7 +144,7 @@ class Socks5Server(SocketServer.StreamRequestHandler): if __name__ == '__main__': os.chdir(os.path.dirname(__file__) or '.') - print 'shadowsocks v1.2.1' + print 'shadowsocks v1.2.2' with open('config.json', 'rb') as f: config = json.load(f) @@ -161,12 +153,9 @@ if __name__ == '__main__': PORT = config['local_port'] KEY = config['password'] METHOD = config.get('method', None) + IPv6 = False - argv = sys.argv[1:] - if '-6' in sys.argv[1:]: - argv.remove('-6') - - optlist, args = getopt.getopt(argv, 's:p:k:l:m:') + optlist, args = getopt.getopt(sys.argv[1:], 's:p:k:l:m:6') for key, value in optlist: if key == '-p': REMOTE_PORT = int(value) @@ -178,6 +167,8 @@ if __name__ == '__main__': SERVER = value elif key == '-m': METHOD = value + elif key == '-6': + IPv6 = True logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filemode='a+') @@ -185,6 +176,8 @@ if __name__ == '__main__': encrypt.init_table(KEY, METHOD) try: + if IPv6: + ThreadingTCPServer.address_family = socket.AF_INET6 server = ThreadingTCPServer(('', PORT), Socks5Server) logging.info("starting server at port %d ..." % PORT) server.serve_forever() diff --git a/server.py b/server.py index 2a98c79..9bf05c4 100755 --- a/server.py +++ b/server.py @@ -125,7 +125,7 @@ class Socks5Server(SocketServer.StreamRequestHandler): if __name__ == '__main__': os.chdir(os.path.dirname(__file__) or '.') - print 'shadowsocks v1.2.1' + print 'shadowsocks v1.2.2' with open('config.json', 'rb') as f: config = json.load(f) @@ -134,8 +134,9 @@ if __name__ == '__main__': PORT = config['server_port'] KEY = config['password'] METHOD = config.get('method', None) + IPv6 = False - optlist, args = getopt.getopt(sys.argv[1:], 'p:k:m:') + optlist, args = getopt.getopt(sys.argv[1:], 'p:k:m:6') for key, value in optlist: if key == '-p': PORT = int(value) @@ -143,12 +144,14 @@ if __name__ == '__main__': KEY = value elif key == '-m': METHOD = value + elif key == '-6': + IPv6 = True logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filemode='a+') encrypt.init_table(KEY, METHOD) - if '-6' in sys.argv[1:]: + if IPv6: ThreadingTCPServer.address_family = socket.AF_INET6 try: server = ThreadingTCPServer(('', PORT), Socks5Server)