Skip to content

Commit

Permalink
mod mu api test
Browse files Browse the repository at this point in the history
  • Loading branch information
esdeathlove committed Feb 13, 2017
1 parent a39d149 commit 3de2c91
Show file tree
Hide file tree
Showing 8 changed files with 733 additions and 146 deletions.
5 changes: 4 additions & 1 deletion apiconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
MU_REGEX = '%5m%id.%suffix'

SERVER_PUB_ADDR = '127.0.0.1' # mujson_mgr need this to generate ssr link
API_INTERFACE = 'glzjinmod' #mudbjson, sspanelv2, sspanelv3, sspanelv3ssr, muapiv2(not support)
API_INTERFACE = 'modwebapi' #glzjinmod, modwebapi

WEBAPI_URL = 'https://zhaoj.in'
WEBAPI_TOKEN = 'glzjin'

#mudb
MUDB_FILE = 'mudb.json'
Expand Down
116 changes: 73 additions & 43 deletions auto_block.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
import os
import configloader
import importloader
import gnupg
import cymysql
import socket
import re
import platform
Expand Down Expand Up @@ -40,22 +38,35 @@ def auto_block_thread():
try:
server_ip = socket.gethostbyname(configloader.get_config().MYSQL_HOST)

if configloader.get_config().MYSQL_SSL_ENABLE == 1:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8',ssl={'ca':configloader.get_config().MYSQL_SSL_CA,'cert':configloader.get_config().MYSQL_SSL_CERT,'key':configloader.get_config().MYSQL_SSL_KEY})
if configloader.get_config().API_INTERFACE == 'modwebapi':
import webapi_utils
data = webapi_utils.getApi('users', {'node_id': configloader.get_config().NODE_ID})
rows = data

#读取节点IP
#SELECT * FROM `ss_node` where `node_ip` != ''
node_ip_list = []
data = webapi_utils.getApi('nodes')
for node in data:
node_ip_list.append(node['node_ip'])
else:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8')
conn.autocommit(True)

#读取节点IP
#SELECT * FROM `ss_node` where `node_ip` != ''
node_ip_list = []
cur = conn.cursor()
cur.execute("SELECT `node_ip` FROM `ss_node` where `node_ip` != ''")
for r in cur.fetchall():
node_ip_list.append(str(r[0]))
cur.close()
import cymysql
if configloader.get_config().MYSQL_SSL_ENABLE == 1:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8',ssl={'ca':configloader.get_config().MYSQL_SSL_CA,'cert':configloader.get_config().MYSQL_SSL_CERT,'key':configloader.get_config().MYSQL_SSL_KEY})
else:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8')
conn.autocommit(True)

#读取节点IP
#SELECT * FROM `ss_node` where `node_ip` != ''
node_ip_list = []
cur = conn.cursor()
cur.execute("SELECT `node_ip` FROM `ss_node` where `node_ip` != ''")
for r in cur.fetchall():
node_ip_list.append(str(r[0]))
cur.close()


deny_file = open('/etc/hosts.deny')
Expand All @@ -67,6 +78,7 @@ def auto_block_thread():
real_deny_list = deny_lines[start_line:]

denyed_ip_list = []
data = []
for line in real_deny_list:
if get_ip(line) and line.find('#') != 0:
ip = get_ip(line)
Expand Down Expand Up @@ -107,37 +119,51 @@ def auto_block_thread():

has_match_node = True
continue

if has_match_node:
continue

cur = conn.cursor()
cur.execute("SELECT * FROM `blockip` where `ip` = '" + str(ip) + "'")
rows = cur.fetchone()
cur.close()
if configloader.get_config().API_INTERFACE == 'modwebapi':
data.append({'ip': ip})
logging.info("Block ip:" + str(ip))
else:
cur = conn.cursor()
cur.execute("SELECT * FROM `blockip` where `ip` = '" + str(ip) + "'")
rows = cur.fetchone()
cur.close()

if rows != None:
continue
if rows != None:
continue

cur = conn.cursor()
cur.execute("INSERT INTO `blockip` (`id`, `nodeid`, `ip`, `datetime`) VALUES (NULL, '" + str(configloader.get_config().NODE_ID) + "', '" + str(ip) + "', unix_timestamp())")
cur.close()
cur = conn.cursor()
cur.execute("INSERT INTO `blockip` (`id`, `nodeid`, `ip`, `datetime`) VALUES (NULL, '" + str(configloader.get_config().NODE_ID) + "', '" + str(ip) + "', unix_timestamp())")
cur.close()

logging.info("Block ip:" + str(ip))
logging.info("Block ip:" + str(ip))

denyed_ip_list.append(ip)
denyed_ip_list.append(ip)

cur = conn.cursor()
cur.execute("SELECT * FROM `blockip` where `datetime`>unix_timestamp()-60")
rows = cur.fetchall()
cur.close()
if configloader.get_config().API_INTERFACE == 'modwebapi':
webapi_utils.postApi('func/block_ip', {'node_id': configloader.get_config().NODE_ID}, {'data': data})

if configloader.get_config().API_INTERFACE == 'modwebapi':
rows = webapi_utils.getApi('func/block_ip')
else:
cur = conn.cursor()
cur.execute("SELECT * FROM `blockip` where `datetime`>unix_timestamp()-60")
rows = cur.fetchall()
cur.close()

deny_str = "";
deny_str_at = "";

for row in rows:
node = row[1]
ip = get_ip(row[2])
if configloader.get_config().API_INTERFACE == 'modwebapi':
node = row['nodeid']
ip = get_ip(row['ip'])
else:
node = row[1]
ip = get_ip(row[2])

if ip != None:

Expand Down Expand Up @@ -176,13 +202,14 @@ def auto_block_thread():




cur = conn.cursor()
cur.execute("SELECT * FROM `unblockip` where `datetime`>unix_timestamp()-60")
rows = cur.fetchall()
cur.close()

conn.close()
if configloader.get_config().API_INTERFACE == 'modwebapi':
rows = webapi_utils.getApi('func/unblock_ip')
else:
cur = conn.cursor()
cur.execute("SELECT * FROM `unblockip` where `datetime`>unix_timestamp()-60")
rows = cur.fetchall()
cur.close()
conn.close()

deny_file = open('/etc/hosts.deny')
fcntl.flock(deny_file.fileno(),fcntl.LOCK_EX)
Expand All @@ -193,7 +220,10 @@ def auto_block_thread():

for line in deny_lines:
for row in rows:
ip = str(row[1])
if configloader.get_config().API_INTERFACE == 'modwebapi':
ip = str(row['ip'])
else:
ip = str(row[1])
if line.find(ip) != -1:
del deny_lines[i]
if common.is_ip(ip) != False:
Expand Down
92 changes: 54 additions & 38 deletions auto_thread.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,25 @@
import importloader
import gnupg
import threading
import cymysql
import subprocess
import platform
from shadowsocks import shell

def run_command(command,id):
value = subprocess.check_output(command.split(' ')).decode('utf-8')
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8')
conn.autocommit(True)
cur = conn.cursor()
cur.execute("INSERT INTO `auto` (`id`, `value`, `sign`, `datetime`,`type`) VALUES (NULL, 'NodeID:" + str(configloader.get_config().NODE_ID) + " Result:\n" + str(value) + "', 'NOT', unix_timestamp(),'2')")
rows = cur.fetchall()
cur.close()
conn.close()
if configloader.get_config().API_INTERFACE == 'modwebapi':
import webapi_utils
webapi_utils.postApi('func/autoexec', {'node_id': configloader.get_config().NODE_ID}, {'data': [{'value': 'NodeID:' + str(configloader.get_config().NODE_ID) + ' Exec Command ID:' + str(configloader.get_config().NODE_ID) + " Result:\n" + str(value), 'sign': str(value), 'type': 2}]})
else:
import cymysql
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8')
conn.autocommit(True)
cur = conn.cursor()
cur.execute("INSERT INTO `auto` (`id`, `value`, `sign`, `datetime`,`type`) VALUES (NULL, 'NodeID:" + str(configloader.get_config().NODE_ID) + " Result:\n" + str(value) + "', 'NOT', unix_timestamp(),'2')")
rows = cur.fetchall()
cur.close()
conn.close()

def auto_thread():
if configloader.get_config().AUTOEXEC == 0 or platform.system() != 'Linux' :
Expand All @@ -38,22 +42,32 @@ def auto_thread():
time.sleep(60)

try:
if configloader.get_config().MYSQL_SSL_ENABLE == 1:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8',ssl={'ca':configloader.get_config().MYSQL_SSL_CA,'cert':configloader.get_config().MYSQL_SSL_CERT,'key':configloader.get_config().MYSQL_SSL_KEY})
if configloader.get_config().API_INTERFACE == 'modwebapi':
import webapi_utils
rows = webapi_utils.getApi('func/autoexec', {'node_id': configloader.get_config().NODE_ID})
else:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8')
conn.autocommit(True)
cur = conn.cursor()
cur.execute("SELECT * FROM `auto` where `datetime`>unix_timestamp()-60 AND `type`=1")
rows = cur.fetchall()
cur.close()
import cymysql
if configloader.get_config().MYSQL_SSL_ENABLE == 1:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8',ssl={'ca':configloader.get_config().MYSQL_SSL_CA,'cert':configloader.get_config().MYSQL_SSL_CERT,'key':configloader.get_config().MYSQL_SSL_KEY})
else:
conn = cymysql.connect(host=configloader.get_config().MYSQL_HOST, port=configloader.get_config().MYSQL_PORT, user=configloader.get_config().MYSQL_USER,
passwd=configloader.get_config().MYSQL_PASS, db=configloader.get_config().MYSQL_DB, charset='utf8')
conn.autocommit(True)
cur = conn.cursor()
cur.execute("SELECT * FROM `auto` where `datetime`>unix_timestamp()-60 AND `type`=1")
rows = cur.fetchall()
cur.close()

for row in rows:
id = row[0]
data = row[2]
sign = row[3]
if configloader.get_config().API_INTERFACE == 'modwebapi':
id = row['id']
data = row['value']
sign = row['sign']
else:
id = row[0]
data = row[2]
sign = row[3]
verify_data = "-----BEGIN PGP SIGNED MESSAGE-----\n" + \
"Hash: SHA256\n" + \
"\n" + \
Expand All @@ -72,26 +86,28 @@ def auto_thread():
break

if is_verified == 1:
cur = conn.cursor()
cur.execute("SELECT * FROM `auto` where `sign`='" + str(configloader.get_config().NODE_ID) + "-" + str(id) + "'")
if cur.fetchone() == None :
cur_c = conn.cursor()
cur_c.execute("INSERT INTO `auto` (`id`, `value`, `sign`, `datetime`,`type`) VALUES (NULL, 'NodeID:" + str(configloader.get_config().NODE_ID) + " Exec Command ID:" + str(configloader.get_config().NODE_ID) + " Starting....', '" + str(configloader.get_config().NODE_ID) + "-" + str(id) + "', unix_timestamp(),'2')")
cur_c.close()

if configloader.get_config().API_INTERFACE == 'modwebapi':
import webapi_utils
webapi_utils.postApi('func/autoexec', {'node_id': configloader.get_config().NODE_ID}, {'data': [{'value': 'NodeID:' + str(configloader.get_config().NODE_ID) + ' Exec Command ID:' + str(configloader.get_config().NODE_ID) + ' Starting....', 'sign': str(configloader.get_config().NODE_ID) + '-' + str(id), 'type': 2}]})
logging.info("Running the command:" + data)
threading.Thread(group = None, target = run_command, name = "commandexec", args = (data,id), kwargs = {}).start()
cur.close()
else:
logging.info("Running the command:" + data)
else:
cur = conn.cursor()
cur.execute("SELECT * FROM `auto` where `sign`='" + str(configloader.get_config().NODE_ID) + "-" + str(id) + "'")
if cur.fetchone() == None :
cur_c = conn.cursor()
cur_c.execute("INSERT INTO `auto` (`id`, `value`, `sign`, `datetime`,`type`) VALUES (NULL, 'NodeID:" + str(configloader.get_config().NODE_ID) + " Exec Command ID:" + str(configloader.get_config().NODE_ID) + " Starting....', '" + str(configloader.get_config().NODE_ID) + "-" + str(id) + "', unix_timestamp(),'2')")
cur_c.close()

cur = conn.cursor()
cur.execute("SELECT * FROM `auto` where `datetime`>unix_timestamp()-60 AND `type`=1")
rows = cur.fetchall()
cur.close()
logging.info("Running the command:" + data)
threading.Thread(group = None, target = run_command, name = "commandexec", args = (data,id), kwargs = {}).start()
cur.close()
else:
logging.info("Running the command, but verify faild:" + data)

conn.commit()
conn.close()
if configloader.get_config().API_INTERFACE != 'modwebapi':
conn.commit()
conn.close()
except Exception as e:
shell.print_exception(e)
logging.error("Auto exec thread error")
52 changes: 1 addition & 51 deletions db_transfer.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def uptime(self):

def load(self):
import os
return os.popen("cat /proc/loadavg | awk '{ print $1\" \"$2\" \"$3 }'").readlines()[0]
return os.popen("cat /proc/loadavg | awk '{ print $1\" \"$2\" \"$3 }'").readlines()[0][:-2]

def trafficShow(self,Traffic):
if Traffic < 1024 :
Expand Down Expand Up @@ -715,53 +715,3 @@ def is_all_thread_alive(self):
if not ServerPool.get_instance().thread.is_alive():
return False
return True

class MuJsonTransfer(DbTransfer):
def __init__(self):
super(MuJsonTransfer, self).__init__()

def update_all_user(self, dt_transfer):
import json
rows = None

config_path = get_config().MUDB_FILE
with open(config_path, 'rb+') as f:
rows = json.loads(f.read().decode('utf8'))
for row in rows:
if "port" in row:
port = row["port"]
if port in dt_transfer:
row["u"] += dt_transfer[port][0]
row["d"] += dt_transfer[port][1]

if rows:
output = json.dumps(rows, sort_keys=True, indent=4, separators=(',', ': '))
with open(config_path, 'r+') as f:
f.write(output)
f.truncate()

def pull_db_all_user(self):
import json
rows = None

config_path = get_config().MUDB_FILE
with open(config_path, 'rb+') as f:
rows = json.loads(f.read().decode('utf8'))
for row in rows:
try:
if 'forbidden_ip' in row:
row['forbidden_ip'] = common.IPNetwork(row['forbidden_ip'])
except Exception as e:
logging.error(e)
try:
if 'forbidden_port' in row:
row['forbidden_port'] = common.PortRange(row['forbidden_port'])
except Exception as e:
logging.error(e)
try:
if 'disconnect_ip' in row:
row['disconnect_ip'] = common.IPNetwork(row['disconnect_ip'])
except Exception as e:
logging.error(e)

return rows
5 changes: 3 additions & 2 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

import server_pool
import db_transfer
import web_transfer
import speedtest_thread
import auto_thread
import auto_block
Expand All @@ -48,8 +49,8 @@ def main():
if False:
db_transfer.DbTransfer.thread_db()
else:
if get_config().API_INTERFACE == 'mudbjson':
threadMain = MainThread(db_transfer.MuJsonTransfer)
if get_config().API_INTERFACE == 'modwebapi':
threadMain = MainThread(web_transfer.WebTransfer)
else:
threadMain = MainThread(db_transfer.DbTransfer)
threadMain.start()
Expand Down
Loading

0 comments on commit 3de2c91

Please sign in to comment.