merge mdss
This commit is contained in:
parent
270f655300
commit
7f8621f153
3 changed files with 53 additions and 9 deletions
30
README.md
30
README.md
|
@ -1,5 +1,13 @@
|
||||||
shadowsocks manyuser branch
|
shadowsocks manyuser branch
|
||||||
===========
|
===========
|
||||||
|
Which people need this branch
|
||||||
|
------------------
|
||||||
|
1.share shadowsocks server
|
||||||
|
|
||||||
|
2.create multi server by shadowsocks
|
||||||
|
|
||||||
|
3.manage server (transfer / account)
|
||||||
|
|
||||||
Install
|
Install
|
||||||
-------
|
-------
|
||||||
install MySQL 5.x.x
|
install MySQL 5.x.x
|
||||||
|
@ -8,7 +16,7 @@ install MySQL 5.x.x
|
||||||
|
|
||||||
create a database named `shadowsocks`
|
create a database named `shadowsocks`
|
||||||
|
|
||||||
import `shadowsocks.sql`
|
import `shadowsocks.sql` into `shadowsocks`
|
||||||
|
|
||||||
edit Config.py
|
edit Config.py
|
||||||
Example:
|
Example:
|
||||||
|
@ -33,13 +41,18 @@ Example:
|
||||||
|
|
||||||
db start server at port [%s] pass [%s]
|
db start server at port [%s] pass [%s]
|
||||||
|
|
||||||
User table colum
|
Database user table column
|
||||||
------------------
|
------------------
|
||||||
`passwd` server pass
|
`passwd` server pass
|
||||||
|
|
||||||
`port` server port
|
`port` server port
|
||||||
|
|
||||||
`t` last keepalive time
|
`t` last keepalive time
|
||||||
|
|
||||||
`u` upload transfer
|
`u` upload transfer
|
||||||
|
|
||||||
`d` download transer
|
`d` download transer
|
||||||
|
|
||||||
`transfer_enable` if u + d > transfer_enable this server will be stop (db_transfer.py del_server_out_of_bound_safe)
|
`transfer_enable` if u + d > transfer_enable this server will be stop (db_transfer.py del_server_out_of_bound_safe)
|
||||||
|
|
||||||
Manage socket
|
Manage socket
|
||||||
|
@ -49,9 +62,18 @@ Manage server work in UDP at `MANAGE_BIND_IP` `MANAGE_PORT`
|
||||||
use `MANAGE_PASS:port:passwd:0` to del a server at port `port`
|
use `MANAGE_PASS:port:passwd:0` to del a server at port `port`
|
||||||
|
|
||||||
use `MANAGE_PASS:port:passwd:1` to run a server at port `port` password is `passwd`
|
use `MANAGE_PASS:port:passwd:1` to run a server at port `port` password is `passwd`
|
||||||
eg:
|
|
||||||
|
|
||||||
udpCliSock.sendto('MANAGE_PASS:65535:123456:1', (MANAGE_BIND_IP, MANAGE_PORT))
|
Python Eg:
|
||||||
|
|
||||||
|
udpsock.sendto('MANAGE_PASS:65535:123456:1', (MANAGE_BIND_IP, MANAGE_PORT))
|
||||||
|
|
||||||
|
PHP Eg:
|
||||||
|
|
||||||
|
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
|
||||||
|
$msg = 'MANAGE_PASS:65535:123456:1';
|
||||||
|
$len = strlen($msg);
|
||||||
|
socket_sendto($sock, $msg, $len, 0, MANAGE_BIND_IP, MANAGE_PORT);
|
||||||
|
socket_close($sock);
|
||||||
|
|
||||||
shadowsocks
|
shadowsocks
|
||||||
===========
|
===========
|
||||||
|
|
|
@ -33,7 +33,8 @@ import thread
|
||||||
import threading
|
import threading
|
||||||
import sys
|
import sys
|
||||||
import asyncmgr
|
import asyncmgr
|
||||||
|
import Config
|
||||||
|
from socket import *
|
||||||
|
|
||||||
class ServerPool(object):
|
class ServerPool(object):
|
||||||
|
|
||||||
|
@ -44,12 +45,12 @@ class ServerPool(object):
|
||||||
self.config = utils.get_config(False)
|
self.config = utils.get_config(False)
|
||||||
utils.print_shadowsocks()
|
utils.print_shadowsocks()
|
||||||
self.dns_resolver = asyncdns.DNSResolver()
|
self.dns_resolver = asyncdns.DNSResolver()
|
||||||
|
self.mgr = asyncmgr.ServerMgr()
|
||||||
self.tcp_servers_pool = {}
|
self.tcp_servers_pool = {}
|
||||||
#self.udp_servers_pool = {}
|
#self.udp_servers_pool = {}
|
||||||
|
|
||||||
self.loop = eventloop.EventLoop()
|
self.loop = eventloop.EventLoop()
|
||||||
thread.start_new_thread(ServerPool.run_server, (self.loop, self.dns_resolver))
|
thread.start_new_thread(ServerPool._loop, (self.loop, self.dns_resolver, self.mgr))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_instance():
|
def get_instance():
|
||||||
|
@ -58,9 +59,8 @@ class ServerPool(object):
|
||||||
return ServerPool.instance
|
return ServerPool.instance
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_server(loop, dns_resolver):
|
def _loop(loop, dns_resolver, mgr):
|
||||||
try:
|
try:
|
||||||
mgr = asyncmgr.ServerMgr()
|
|
||||||
mgr.add_to_loop(loop)
|
mgr.add_to_loop(loop)
|
||||||
dns_resolver.add_to_loop(loop)
|
dns_resolver.add_to_loop(loop)
|
||||||
loop.run()
|
loop.run()
|
||||||
|
@ -103,6 +103,24 @@ class ServerPool(object):
|
||||||
ret = e
|
ret = e
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def del_server(self, port):
|
||||||
|
port = int(port)
|
||||||
|
ret = True
|
||||||
|
if port not in self.tcp_servers_pool:
|
||||||
|
logging.info("stopped server at %s:%d already stop" % (self.config['server'], int(port)))
|
||||||
|
return True
|
||||||
|
logging.info("stopping server at %s:%d" % (self.config['server'], int(port)))
|
||||||
|
try:
|
||||||
|
udpsock = socket(AF_INET, SOCK_DGRAM)
|
||||||
|
udpsock.sendto('%s:%s:0:0' % (Config.MANAGE_PASS, port), (Config.MANAGE_BIND_IP, Config.MANAGE_PORT))
|
||||||
|
udpsock.close()
|
||||||
|
except Exception, e:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
ret = e
|
||||||
|
logging.warn(e)
|
||||||
|
return ret
|
||||||
|
|
||||||
def cb_del_server(self, port):
|
def cb_del_server(self, port):
|
||||||
port = int(port)
|
port = int(port)
|
||||||
ret = True
|
ret = True
|
||||||
|
|
|
@ -356,6 +356,7 @@ class TCPRelayHandler(object):
|
||||||
if not data:
|
if not data:
|
||||||
self.destroy()
|
self.destroy()
|
||||||
return
|
return
|
||||||
|
self._server.server_transfer_ul += len(data)
|
||||||
if not is_local:
|
if not is_local:
|
||||||
data = self._encryptor.decrypt(data)
|
data = self._encryptor.decrypt(data)
|
||||||
if not data:
|
if not data:
|
||||||
|
@ -388,6 +389,7 @@ class TCPRelayHandler(object):
|
||||||
if not data:
|
if not data:
|
||||||
self.destroy()
|
self.destroy()
|
||||||
return
|
return
|
||||||
|
self._server.server_transfer_dl += len(data)
|
||||||
if self._is_local:
|
if self._is_local:
|
||||||
data = self._encryptor.decrypt(data)
|
data = self._encryptor.decrypt(data)
|
||||||
else:
|
else:
|
||||||
|
@ -495,6 +497,8 @@ class TCPRelay(object):
|
||||||
self._eventloop = None
|
self._eventloop = None
|
||||||
self._fd_to_handlers = {}
|
self._fd_to_handlers = {}
|
||||||
self._last_time = time.time()
|
self._last_time = time.time()
|
||||||
|
self.server_transfer_ul = 0L
|
||||||
|
self.server_transfer_dl = 0L
|
||||||
|
|
||||||
self._timeout = config['timeout']
|
self._timeout = config['timeout']
|
||||||
self._timeouts = [] # a list for all the handlers
|
self._timeouts = [] # a list for all the handlers
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue