本文章为小川先生原创,转载可以,请标明出处。
最近开始学python了,然后不小心开了个ss服务器,然后有同学找我要账号,我说,那好吧,回去给你整一个。但实际上,加个账号得改ss的json格式的配置文件,然后改完还得重启ss服务,配置文件要是不小心少个逗号,或者是引号,ss还不能正常跑,好吧,既然学了python,就拿他写个小工具吧。
惯例,直接上代码。
python2的代码,用py3的请把raw_input()改为input()
#!/usr/bin/python
import re
#正则表达式模块,用于后面重启ss
import os
import json
import random
def rJsonFile(fName):
with open(fName) as f:
src = json.loads(f.read())
return src
def wJsonFile(fName, data):
#data is a dict
with open(fName, 'w') as f:
f.write(json.dumps(data, sort_keys = True, indent = 4))
def ssUpdate():
global srcJson
global srcHash
wJsonFile(ssJson, srcJson)
wJsonFile(ssHash, srcHash)
ssReboot()
def ssAdd():
global srcJson
global srcHash
usrName = raw_input('name:')
s = srcJson['port_password']
while True:
flag = 1
newPort = str(random.randint(30000, 39999))
for ke in s.keys():
if newPort == ke:
flag = 0
break
if flag==1:
break
pwd = str(random.randint(10000, 99999))
s[newPort] = pwd
srcHash[newPort] = usrName
ssUpdate()
print 'Success add' + newPort + ':' + pwd
def ssDel():
global srcJson
global srcHash
flag = 1
s = srcJson['port_password']
while flag:
flag = 0
delPort = raw_input('port:')
try:
del s[delPort]
except KeyError:
flag = 1
print 'Error port!'
del srcHash[delPort]
ssUpdate()
def ssReboot():
f = os.popen('netstat -tulnp | grep 32981')
s = re.search(r'\d{1,5}/python', f.read()).group(0)
s = s[0:s.find(r'/')]
os.system('kill '+s)
def listPorts():
global srcJson
global srcHash
s = srcJson['port_password']
sg = srcHash
print 'port\tpwd\tuser'
for key in sorted(s.keys()):
print key+'\t'+s[key]+'\t'+sg[key]
def ssInit():
global srcJson
global srcHash
srcJson = rJsonFile(ssJson)
srcHash = rJsonFile(ssHash)
srcJson = ''
srcHash = ''
ssJson = '/etc/shadow.json'
#ss的配置文件
ssHash = '/etc/ssHashTable.xc'
#自定义的端口用户对应表
ssCmd = {'add':ssAdd, 'del':ssDel, 'ls':listPorts, 'reboot':ssReboot, 'exit':exit}
ssInit()
while True:
usrCmd = raw_input('>>')
ssCmd[usrCmd]()
用法:把代码保存到.py的文件里,然后把chmod 744,然后把
shadow.json,ssHashTable.xc示例文件放到/etc/目录下。
然后执行代码,目前支持的命令有,add(添加),del(删除),ls(列出目前端口情况),reboot(重启ss),exit(退出程序)。
shadow.json 示例文件
{
"server":"0.0.0.0",
"port_password":{
"32981":"123456",
"35642":"654321"
},
"local_port":1080,
"timeout":600,
"method":"aes-256-cfb"
}
ssHashTable.xc 示例文件
{
"32981": "YujiaLee",
"35642": "Zhang"
}
本文章为小川先生原创,转载可以,请标明出处。