optimize shell (#173)
This commit is contained in:
parent
bf8bb8afe2
commit
2750af4a2e
1 changed files with 48 additions and 56 deletions
104
shadowsocks/shell.py
Normal file → Executable file
104
shadowsocks/shell.py
Normal file → Executable file
|
@ -52,49 +52,37 @@ def print_exception(e):
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
def __version():
|
||||||
|
version_str = ''
|
||||||
|
try:
|
||||||
|
import pkg_resources
|
||||||
|
version_str = pkg_resources.get_distribution('shadowsocks').version
|
||||||
|
except Exception:
|
||||||
|
try:
|
||||||
|
from shadowsocks import version
|
||||||
|
version_str = version.version()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return version_str
|
||||||
|
|
||||||
def print_shadowsocks():
|
def print_shadowsocks():
|
||||||
version_str = ''
|
print('ShadowsocksR %s' % __version())
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
version_str = pkg_resources.get_distribution('shadowsocks').version
|
|
||||||
except Exception:
|
|
||||||
try:
|
|
||||||
from shadowsocks import version
|
|
||||||
version_str = version.version()
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
print('ShadowsocksR %s' % version_str)
|
|
||||||
|
|
||||||
def log_shadowsocks_version():
|
def log_shadowsocks_version():
|
||||||
version_str = ''
|
logging.info('ShadowsocksR %s' % __version())
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
version_str = pkg_resources.get_distribution('shadowsocks').version
|
|
||||||
except Exception:
|
|
||||||
try:
|
|
||||||
from shadowsocks import version
|
|
||||||
version_str = version.version()
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
logging.info('ShadowsocksR %s' % version_str)
|
|
||||||
|
|
||||||
def find_config():
|
def find_config():
|
||||||
config_path = 'user-config.json'
|
user_config_path = 'user-config.json'
|
||||||
if os.path.exists(config_path):
|
|
||||||
return config_path
|
|
||||||
config_path = os.path.join(os.path.dirname(__file__), '../', 'user-config.json')
|
|
||||||
if os.path.exists(config_path):
|
|
||||||
return config_path
|
|
||||||
|
|
||||||
config_path = 'config.json'
|
config_path = 'config.json'
|
||||||
if os.path.exists(config_path):
|
|
||||||
return config_path
|
|
||||||
config_path = os.path.join(os.path.dirname(__file__), '../', 'config.json')
|
|
||||||
if os.path.exists(config_path):
|
|
||||||
return config_path
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
def sub_find(file_name):
|
||||||
|
if os.path.exists(file_name):
|
||||||
|
return file_name
|
||||||
|
file_name = os.path.join(os.path.abspath('..'), file_name)
|
||||||
|
return file_name if os.path.exists(file_name) else None
|
||||||
|
|
||||||
|
return sub_find(user_config_path) or sub_find(config_path)
|
||||||
|
|
||||||
def check_config(config, is_local):
|
def check_config(config, is_local):
|
||||||
if config.get('daemon', None) == 'stop':
|
if config.get('daemon', None) == 'stop':
|
||||||
|
@ -119,21 +107,21 @@ def check_config(config, is_local):
|
||||||
config['server_port'] = int(config['server_port'])
|
config['server_port'] = int(config['server_port'])
|
||||||
|
|
||||||
if config.get('local_address', '') in [b'0.0.0.0']:
|
if config.get('local_address', '') in [b'0.0.0.0']:
|
||||||
logging.warn('warning: local set to listen on 0.0.0.0, it\'s not safe')
|
logging.warning('warning: local set to listen on 0.0.0.0, it\'s not safe')
|
||||||
if config.get('server', '') in ['127.0.0.1', 'localhost']:
|
if config.get('server', '') in ['127.0.0.1', 'localhost']:
|
||||||
logging.warn('warning: server set to listen on %s:%s, are you sure?' %
|
logging.warning('warning: server set to listen on %s:%s, are you sure?' %
|
||||||
(to_str(config['server']), config['server_port']))
|
(to_str(config['server']), config['server_port']))
|
||||||
if (config.get('method', '') or '').lower() == 'table':
|
if (config.get('method', '') or '').lower() == 'table':
|
||||||
logging.warn('warning: table is not safe; please use a safer cipher, '
|
logging.warning('warning: table is not safe; please use a safer cipher, '
|
||||||
'like AES-256-CFB')
|
'like AES-256-CFB')
|
||||||
if (config.get('method', '') or '').lower() == 'rc4':
|
if (config.get('method', '') or '').lower() == 'rc4':
|
||||||
logging.warn('warning: RC4 is not safe; please use a safer cipher, '
|
logging.warning('warning: RC4 is not safe; please use a safer cipher, '
|
||||||
'like AES-256-CFB')
|
'like AES-256-CFB')
|
||||||
if config.get('timeout', 300) < 100:
|
if config.get('timeout', 300) < 100:
|
||||||
logging.warn('warning: your timeout %d seems too short' %
|
logging.warning('warning: your timeout %d seems too short' %
|
||||||
int(config.get('timeout')))
|
int(config.get('timeout')))
|
||||||
if config.get('timeout', 300) > 600:
|
if config.get('timeout', 300) > 600:
|
||||||
logging.warn('warning: your timeout %d seems too long' %
|
logging.warning('warning: your timeout %d seems too long' %
|
||||||
int(config.get('timeout')))
|
int(config.get('timeout')))
|
||||||
if config.get('password') in [b'mypassword']:
|
if config.get('password') in [b'mypassword']:
|
||||||
logging.error('DON\'T USE DEFAULT PASSWORD! Please change it in your '
|
logging.error('DON\'T USE DEFAULT PASSWORD! Please change it in your '
|
||||||
|
@ -149,7 +137,8 @@ def check_config(config, is_local):
|
||||||
|
|
||||||
def get_config(is_local):
|
def get_config(is_local):
|
||||||
global verbose
|
global verbose
|
||||||
|
config = {}
|
||||||
|
config_path = None
|
||||||
logging.basicConfig(level=logging.INFO,
|
logging.basicConfig(level=logging.INFO,
|
||||||
format='%(levelname)-s: %(message)s')
|
format='%(levelname)-s: %(message)s')
|
||||||
if is_local:
|
if is_local:
|
||||||
|
@ -161,11 +150,22 @@ def get_config(is_local):
|
||||||
longopts = ['help', 'fast-open', 'pid-file=', 'log-file=', 'workers=',
|
longopts = ['help', 'fast-open', 'pid-file=', 'log-file=', 'workers=',
|
||||||
'forbidden-ip=', 'user=', 'manager-address=', 'version']
|
'forbidden-ip=', 'user=', 'manager-address=', 'version']
|
||||||
try:
|
try:
|
||||||
config_path = find_config()
|
|
||||||
optlist, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
|
optlist, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
|
||||||
for key, value in optlist:
|
for key, value in optlist:
|
||||||
if key == '-c':
|
if key == '-c':
|
||||||
config_path = value
|
config_path = value
|
||||||
|
elif key in ('-h', '--help'):
|
||||||
|
print_help(is_local)
|
||||||
|
sys.exit(0)
|
||||||
|
elif key == '--version':
|
||||||
|
print_shadowsocks()
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if config_path is None:
|
||||||
|
config_path = find_config()
|
||||||
|
|
||||||
|
|
||||||
if config_path:
|
if config_path:
|
||||||
logging.info('loading config from %s' % config_path)
|
logging.info('loading config from %s' % config_path)
|
||||||
|
@ -173,11 +173,9 @@ def get_config(is_local):
|
||||||
try:
|
try:
|
||||||
config = parse_json_in_str(remove_comment(f.read().decode('utf8')))
|
config = parse_json_in_str(remove_comment(f.read().decode('utf8')))
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
logging.error('found an error in config.json: %s',
|
logging.error('found an error in config.json: %s', str(e))
|
||||||
e.message)
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
|
||||||
config = {}
|
|
||||||
|
|
||||||
v_count = 0
|
v_count = 0
|
||||||
for key, value in optlist:
|
for key, value in optlist:
|
||||||
|
@ -217,15 +215,7 @@ def get_config(is_local):
|
||||||
config['user'] = to_str(value)
|
config['user'] = to_str(value)
|
||||||
elif key == '--forbidden-ip':
|
elif key == '--forbidden-ip':
|
||||||
config['forbidden_ip'] = to_str(value)
|
config['forbidden_ip'] = to_str(value)
|
||||||
elif key in ('-h', '--help'):
|
|
||||||
if is_local:
|
|
||||||
print_local_help()
|
|
||||||
else:
|
|
||||||
print_server_help()
|
|
||||||
sys.exit(0)
|
|
||||||
elif key == '--version':
|
|
||||||
print_shadowsocks()
|
|
||||||
sys.exit(0)
|
|
||||||
elif key == '-d':
|
elif key == '-d':
|
||||||
config['daemon'] = to_str(value)
|
config['daemon'] = to_str(value)
|
||||||
elif key == '--pid-file':
|
elif key == '--pid-file':
|
||||||
|
@ -235,6 +225,8 @@ def get_config(is_local):
|
||||||
elif key == '-q':
|
elif key == '-q':
|
||||||
v_count -= 1
|
v_count -= 1
|
||||||
config['verbose'] = v_count
|
config['verbose'] = v_count
|
||||||
|
else:
|
||||||
|
continue
|
||||||
except getopt.GetoptError as e:
|
except getopt.GetoptError as e:
|
||||||
print(e, file=sys.stderr)
|
print(e, file=sys.stderr)
|
||||||
print_help(is_local)
|
print_help(is_local)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue