diff --git a/business/compensate.py b/business/compensate.py new file mode 100644 index 0000000..40d3cab --- /dev/null +++ b/business/compensate.py @@ -0,0 +1,84 @@ +import pymysql +from datetime import datetime, timedelta + +def add_days_to_table_fields( + conn_params: dict, + table_name: str, + days: int +): + """ + 为指定表的 end_time 和 end_time_unix 字段分别增加指定天数。 + 两个字段独立处理,end_time 为空时不改,end_time_unix 为空时也不改。 + """ + # 连接数据库 + conn = pymysql.connect(**conn_params) + cursor = conn.cursor(pymysql.cursors.DictCursor) + + # 查询整表需要的字段 + cursor.execute(f"SELECT id, end_time, end_time_unix FROM {table_name}") + rows = cursor.fetchall() + + count_end_time = 0 + count_end_time_unix = 0 + + for row in rows: + record_id = row["id"] + end_time_str = row.get("end_time") + end_time_unix_str = row.get("end_time_unix") + + new_end_time = None + new_end_time_unix = None + + # 1️⃣ 处理 end_time + if end_time_str: + try: + dt = datetime.strptime(end_time_str, "%Y-%m-%d %H:%M:%S") + new_dt = dt + timedelta(days=days) + new_end_time = new_dt.strftime("%Y-%m-%d %H:%M:%S") + count_end_time += 1 + except Exception as e: + print(f"[WARN] id={record_id} 的 end_time 无法解析: {end_time_str} ({e})") + + # 2️⃣ 处理 end_time_unix + if end_time_unix_str and end_time_unix_str.isdigit(): + try: + ts = int(end_time_unix_str) + new_ts = ts + days * 86400 # 1天=86400秒 + new_end_time_unix = str(new_ts) + count_end_time_unix += 1 + except Exception as e: + print(f"[WARN] id={record_id} 的 end_time_unix 无法解析: {end_time_unix_str} ({e})") + + # 3️⃣ 如果有任意一个字段需要更新,则执行更新 + if new_end_time or new_end_time_unix: + set_clauses = [] + params = [] + if new_end_time: + set_clauses.append("end_time=%s") + params.append(new_end_time) + if new_end_time_unix: + set_clauses.append("end_time_unix=%s") + params.append(new_end_time_unix) + params.append(record_id) + + sql_update = f"UPDATE {table_name} SET {', '.join(set_clauses)} WHERE id=%s" + print(f'执行sql ===> {sql_update} 参数 ==> {params}') + cursor.execute(sql_update, params) + + conn.commit() + cursor.close() + conn.close() + + print(f"✅ 更新完成:end_time {count_end_time} 条,end_time_unix {count_end_time_unix} 条。") + +# 直接操作数据库,给全体用户增加有效天数 +if __name__ == "__main__": + db_info = { + 'host': '101.227.74.8', + 'port': 3306, + 'user': 'root', + 'password': '9lYgSVPPDjh6sq2C', + "database": "ss2_migrated", + } + + add_days_to_table_fields(db_info, "group_purchase_users", days=7) diff --git a/proxy_line/forward_json.py b/proxy_line/forward_json.py new file mode 100644 index 0000000..4c1e95c --- /dev/null +++ b/proxy_line/forward_json.py @@ -0,0 +1,18 @@ +from proxy_line.write_file import writ_json_file + +if __name__ == '__main__': + root_path= "/Users/leonbob/workspace/project/langtu/lt/jsq/server-setting/new" + # 目标起始 ip + target_ip = "172.16.0.11" + # 文件起始序号 + sart_index_num = 161 + # 起始监听端口号 + start_listen_port = 5715 + # 文件总数 + file_total_count = 20 + + writ_json_file(root_path, sart_index_num, file_total_count, target_ip, start_listen_port) + + + + diff --git a/proxy_line/insert_sql.py b/proxy_line/insert_sql.py new file mode 100644 index 0000000..1fd5d48 --- /dev/null +++ b/proxy_line/insert_sql.py @@ -0,0 +1,11 @@ + + +# insert into ss2_migrated.ip_port_allocation ( ip_address, port, is_used, group_purchase_id, last_used_at, created_at, updated_at, max_connections, current_connections, type) +# values ( '103.6.221.91', 5663, 0, 0,now(), now(), now(), 1, 0, 'group_purchase') +if __name__ == '__main__': + line_count = 52 + start_port = 5663 + start_ip = '103.6.221.91' + print("insert into ss2_migrated.ip_port_allocation ( ip_address, port, is_used, group_purchase_id, last_used_at, created_at, updated_at, max_connections, current_connections, type) values ") + for i in range(0, line_count): + print(f" ( '{start_ip}', {start_port + i}, 0, 0,now(), now(), now(), 1, 0, 'group_purchase'),") \ No newline at end of file diff --git a/proxy_line/jumper_json.py b/proxy_line/jumper_json.py new file mode 100644 index 0000000..66c1e32 --- /dev/null +++ b/proxy_line/jumper_json.py @@ -0,0 +1,15 @@ +from proxy_line.write_file import writ_json_file + +if __name__ == '__main__': + root_path= "/Users/leonbob/workspace/project/langtu/lt/jsq/server-setting/new" + + # 文件起始序号 + sart_index_num = 101 + # 起始监听端口号 + start_listen_port = 5655 + # 目标ip + target_ip = "10.0.0.2" + file_total_count = 60 + + writ_json_file(root_path, target_ip, sart_index_num, start_listen_port, file_total_count) + diff --git a/proxy_line/shell_start_forward.py b/proxy_line/shell_start_forward.py new file mode 100644 index 0000000..d6dd688 --- /dev/null +++ b/proxy_line/shell_start_forward.py @@ -0,0 +1,6 @@ +if __name__ == '__main__': + start_index = 161 + end_index = 180 + for i in range(start_index, end_index + 1): + print(f"nohup ./forward -c {i}.json > {i}.log 2>&1 &") + diff --git a/proxy_line/shell_start_s5.py b/proxy_line/shell_start_s5.py new file mode 100644 index 0000000..49cdf85 --- /dev/null +++ b/proxy_line/shell_start_s5.py @@ -0,0 +1,30 @@ +import ipaddress + + +def generate_commands(start_port, start_subnet, start_ip, count): + ip = ipaddress.ip_address(start_ip) + commands = [] + + for i in range(count): + port = start_port + i + subnet_num = 65 + i # 从 10.65.0.0/16 开始 + subnet = f"10.{subnet_num}.0.0/16" + gateway = f"10.{subnet_num}.0.1" + use_ip = str(ip + i) + + cmd = (f"nohup ./s5_multi_1.0.1 -listen \"{port}={use_ip}\" " + f"-report=true " + f"> /root/socket5_1.0.1/{port}.log 2>&1 &") + commands.append(cmd) + return commands + + +if __name__ == "__main__": + # 参数配置 + START_PORT = 25715 + START_IP = "45.86.235.163" + COUNT = 20 + + cmds = generate_commands(START_PORT, 65, START_IP, COUNT) + for c in cmds: + print(c) \ No newline at end of file diff --git a/proxy_line/shell_start_server.py b/proxy_line/shell_start_server.py new file mode 100644 index 0000000..2b0e315 --- /dev/null +++ b/proxy_line/shell_start_server.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +import ipaddress + + +def generate_commands(start_port, start_subnet, start_ip, count): + ip = ipaddress.ip_address(start_ip) + commands = [] + + for i in range(count): + port = start_port + i + subnet_num = 65 + i # 从 10.65.0.0/16 开始 + subnet = f"10.{subnet_num}.0.0/16" + gateway = f"10.{subnet_num}.0.1" + use_ip = str(ip + i) + + cmd = (f"nohup /root/server_tun/server --port {port} " + f"--subnet {subnet} " + f"--gateway {gateway} " + f"--use-ip {use_ip} " + f"> /root/server_tun/{port}.log 2>&1 &") + commands.append(cmd) + return commands + + +if __name__ == "__main__": + # 参数配置 + START_PORT = 5715 + START_IP = "45.86.235.163" + COUNT = 20 + + cmds = generate_commands(START_PORT, 65, START_IP, COUNT) + for c in cmds: + print(c) diff --git a/proxy_line/update_port_ip_sql.py b/proxy_line/update_port_ip_sql.py new file mode 100644 index 0000000..fa14b90 --- /dev/null +++ b/proxy_line/update_port_ip_sql.py @@ -0,0 +1,11 @@ + + + +if __name__ == '__main__': + start_index = 5555 + end_index = 5734 + start_ip_subfix = 3 + for index,item in enumerate(range(start_index, end_index + 1)): + print('START TRANSACTION;') + print(f"UPDATE port_keys SET out_ip = '45.86.235.{start_ip_subfix + index}' WHERE `port` = {item};") + print('COMMIT;') diff --git a/proxy_line/write_file.py b/proxy_line/write_file.py new file mode 100644 index 0000000..de77181 --- /dev/null +++ b/proxy_line/write_file.py @@ -0,0 +1,15 @@ +import json + +def writ_json_file(root_folder_path,sart_index_num, file_total_count,target_ip,start_listen_port) : + for i,v in enumerate(range(sart_index_num, sart_index_num + file_total_count)): + # 定义一个json + port = str(start_listen_port + i) + target = target_ip + ":" + port + json_config = { + "server": target, + "port": ":"+ port, + } + print(json_config) + # 写对应文件 + with open(f'{root_folder_path}/{v}.json', 'w', encoding='utf-8') as json_file: + json.dump(json_config, json_file, indent=4) \ No newline at end of file