raw action
This commit is contained in:
parent
ff38ec04e9
commit
afb7179d05
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/ttt/20887418068269380156_20241208.csv/20887418068269380156_20241208_账务明细.csv" charset="UTF-16" />
|
||||
</component>
|
||||
</project>
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (script_tools)" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
|
||||
</project>
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.8 (script_tools)" jdkType="Python SDK" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.9" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
|
@ -1,11 +0,0 @@
|
|||
from kafka import KafkaProducer
|
||||
import json
|
||||
|
||||
producer = KafkaProducer(bootstrap_servers=['120.27.147.4:9092'],
|
||||
value_serializer=lambda m: json.dumps(m).encode('ascii'))
|
||||
|
||||
print(producer.config)
|
||||
|
||||
message = {"name": "John", "age": 30}
|
||||
producer.send('test-topic', message)
|
||||
producer.flush() # 确保所有消息都已发送
|
|
@ -0,0 +1,112 @@
|
|||
import json
|
||||
from lib.util import *
|
||||
import redis
|
||||
from lib.odps import *
|
||||
import time
|
||||
from lib.log import *
|
||||
|
||||
service_name = "raw_action"
|
||||
log_dir = '.'
|
||||
logger = Logger(service_name, log_dir=log_dir, print_terminal=True)
|
||||
|
||||
|
||||
class S:
|
||||
def __init__(self):
|
||||
self.odps_db = get_odps_db()
|
||||
self.redis_cli = redis.Redis(
|
||||
host="172.31.37.66",
|
||||
port=6379,
|
||||
password="redis_HtfNQJ",
|
||||
)
|
||||
self.bulk = list()
|
||||
self.ut = int(time.time())
|
||||
|
||||
def __del__(self):
|
||||
self.redis_cli.close()
|
||||
|
||||
def flush(self):
|
||||
if len(self.bulk) <= 0:
|
||||
return
|
||||
|
||||
tomorrow_zero_time = get_today_zero_time() + 86400
|
||||
inserts = list()
|
||||
ym = ""
|
||||
day = ""
|
||||
while len(self.bulk) > 0:
|
||||
action = self.bulk.pop()
|
||||
ct = safe_get_int(action, "t")
|
||||
if ct >= tomorrow_zero_time:
|
||||
continue
|
||||
dt = datetime.datetime.fromtimestamp(ct)
|
||||
|
||||
new_ym = "%d%02d" % (dt.year, dt.month)
|
||||
new_day = "%02d" % dt.day
|
||||
if ym == "" and day == "":
|
||||
ym = new_ym
|
||||
day = new_day
|
||||
if new_ym != ym or new_day != day:
|
||||
break
|
||||
|
||||
data = [
|
||||
str(ct),
|
||||
safe_get_str(action, "app"),
|
||||
str(safe_get_int(action, "mid")),
|
||||
safe_get_str(action, "oid"),
|
||||
safe_get_str(action, "type"),
|
||||
safe_get_str(action, "stype"),
|
||||
safe_get_str(action, "from"),
|
||||
safe_get_str(action, "ip"),
|
||||
safe_get_str(action, "opt"),
|
||||
]
|
||||
inserts.append(data)
|
||||
partition = "ym=%s,day=%s" % (ym, day)
|
||||
self.odps_db.write_table(
|
||||
"actionlog", inserts,
|
||||
partition=partition,
|
||||
create_partition=True
|
||||
)
|
||||
self.ut = int(time.time())
|
||||
logger.Info("insert: {}, left: {}".format(len(inserts), len(self.bulk)))
|
||||
|
||||
def loop(self):
|
||||
key = "action"
|
||||
while True:
|
||||
time_now = int(time.time())
|
||||
if len(self.bulk) >= 10000 or time_now - self.ut >= 60:
|
||||
self.flush()
|
||||
|
||||
try:
|
||||
# 从列表左侧弹出元素
|
||||
item = self.redis_cli.lpop(key)
|
||||
if not item:
|
||||
logger.Info("no data, sleep...")
|
||||
time.sleep(0.5)
|
||||
continue
|
||||
msg_str = item.decode("utf-8")
|
||||
msg = json.loads(msg_str)
|
||||
action_str = safe_get_str(msg, "message")
|
||||
action = json.loads(action_str)
|
||||
self.bulk.append(action)
|
||||
if len(self.bulk) % 100 == 0:
|
||||
logger.Info("len(bulk): {}".format(len(self.bulk)))
|
||||
except Exception as e:
|
||||
logger.Error("panic: {}".format(str(e)))
|
||||
|
||||
# 等待一段时间再检查
|
||||
# time.sleep(1)
|
||||
|
||||
|
||||
s = S()
|
||||
s.loop()
|
||||
#
|
||||
# lis = [1, 2, 3]
|
||||
# while len(lis) > 0:
|
||||
# print(lis.pop())
|
||||
# print(lis)
|
||||
#
|
||||
# dt = datetime.datetime.fromtimestamp(int(time.time()))
|
||||
#
|
||||
# new_ym = "%d%02d" % (dt.year, dt.month)
|
||||
# new_day = "%02d" % dt.day
|
||||
#
|
||||
# print(new_ym, new_day)
|
|
@ -6,8 +6,19 @@ log_dir = "."
|
|||
logger = Logger(service_name, log_dir=log_dir, print_terminal=True)
|
||||
|
||||
|
||||
def get_rank_host_cnt(rank):
|
||||
if 0 <= rank <= 30:
|
||||
return 30
|
||||
elif 30 < rank <= 100:
|
||||
return 10
|
||||
elif 100 < rank <= 300:
|
||||
return 3
|
||||
else:
|
||||
return 1
|
||||
|
||||
|
||||
def check_wx_url(url):
|
||||
api_url = "http://wx.rrbay.com/pro/wxUrlCheck2.ashx?key=9dab4264f077aa3697d346f7ac1f5270&url=%s" % url
|
||||
api_url = "http://wx.rrbay.com/pro/wxUrlCheck2.ashx?key=9dab4264f077aa3697d346f7ac1f5270&url=https://%s&mode=authkey1" % url
|
||||
res = requests.get(api_url)
|
||||
r = json.loads(res.text)
|
||||
return r
|
||||
|
@ -15,15 +26,50 @@ def check_wx_url(url):
|
|||
|
||||
class S:
|
||||
def __init__(self):
|
||||
self.col_streamer = MongoDB(
|
||||
host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659",
|
||||
port=3717,
|
||||
db="streamer",
|
||||
collection="streamer"
|
||||
)
|
||||
self.col_share_url = MongoDB(
|
||||
host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659",
|
||||
port=3717,
|
||||
db="share",
|
||||
collection="share_url"
|
||||
)
|
||||
self.col_streamer_share_url = MongoDB(
|
||||
host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659",
|
||||
port=3717,
|
||||
db="share",
|
||||
collection="streamer_share_url"
|
||||
)
|
||||
self.mysql_db_bi = Mysql(
|
||||
"172.31.37.71", 3306, "bi", "root", "Wishpal@2023"
|
||||
)
|
||||
|
||||
def __del__(self):
|
||||
self.col_streamer.close()
|
||||
self.col_share_url.close()
|
||||
self.col_streamer_share_url.close()
|
||||
self.mysql_db_bi.close()
|
||||
|
||||
def get_streamer_ranks(self):
|
||||
sql = '''
|
||||
select * from vas_cur_streamer_income order by income desc
|
||||
'''
|
||||
rows = list(self.mysql_db_bi.query(sql))
|
||||
return rows
|
||||
|
||||
def get_domain_host_map(self):
|
||||
domain_host_map = dict()
|
||||
docs = self.col_share_url.find({})
|
||||
for doc in docs:
|
||||
domain = safe_get_str(doc, "domain")
|
||||
if domain not in domain_host_map.keys():
|
||||
domain_host_map[domain] = list()
|
||||
domain_host_map[domain].append(doc)
|
||||
return domain_host_map
|
||||
|
||||
def proc(self):
|
||||
try:
|
||||
|
@ -40,6 +86,8 @@ class S:
|
|||
code = safe_get_str(res, "Code")
|
||||
if code == "002":
|
||||
return
|
||||
if code == "101":
|
||||
msg = safe_get_str(res, "Msg")
|
||||
|
||||
# 更新db
|
||||
query = {
|
||||
|
@ -59,6 +107,14 @@ class S:
|
|||
|
||||
|
||||
s = S()
|
||||
while True:
|
||||
s.proc()
|
||||
time.sleep(21)
|
||||
# while True:
|
||||
# s.proc()
|
||||
# time.sleep(21)
|
||||
# print(check_wx_url("https://kx0jjwssu14s007.tiefen.club"))
|
||||
# ranks = s.get_streamer_ranks()
|
||||
# for rank in ranks:
|
||||
# print(rank)
|
||||
|
||||
|
||||
m = s.get_domain_host_map()
|
||||
print(m)
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
from lib.all import *
|
||||
|
||||
class S:
|
||||
def __init__(self):
|
|
@ -0,0 +1,8 @@
|
|||
from odps import ODPS
|
||||
|
||||
odps_access_id = 'LTAI5tMp5o4u6Twgm6hL9EQV'
|
||||
odps_secret_key = 'O7xAsKMnnWHwrlfvka30v6yr13Qxa3'
|
||||
|
||||
|
||||
def get_odps_db(project="tiefen_bigdata"):
|
||||
return ODPS(odps_access_id, odps_secret_key, project)
|
|
@ -0,0 +1,104 @@
|
|||
from lib.all import *
|
||||
from cloudflare_manager import *
|
||||
from namesilo_manager import *
|
||||
import ningx_proxy_manager as npm
|
||||
import string
|
||||
import random
|
||||
|
||||
cf_manager = CloudflareManager()
|
||||
ns_manager = NameSiloMgr()
|
||||
|
||||
service_name = 'log'
|
||||
log_dir = '.'
|
||||
logger = Logger(service_name, log_dir=log_dir)
|
||||
|
||||
|
||||
def generate_random_string(length):
|
||||
letters = string.ascii_lowercase + string.digits
|
||||
return ''.join(random.choice(letters) for _ in range(length))
|
||||
|
||||
|
||||
def proc():
|
||||
# 获取所有cloudflare zone
|
||||
cf_zones_resp = json.loads(cf_manager.zone_list().json())
|
||||
cf_zones = safe_get_list(cf_zones_resp, "result")
|
||||
cf_domain_zone_map = dict()
|
||||
for cf_zone in cf_zones:
|
||||
domain = safe_get_str(cf_zone, "name")
|
||||
cf_domain_zone_map[domain] = cf_zone
|
||||
# for k, v in cf_domain_zone_map.items():
|
||||
# print(k, v)
|
||||
|
||||
# 获取nginx证书
|
||||
ng_cert_map = npm.get_all_cert_map()
|
||||
# for k, v in ng_cert_map.items():
|
||||
# print(k, v)
|
||||
|
||||
col_share_url = MongoDB(
|
||||
host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659",
|
||||
port=3717,
|
||||
db="share",
|
||||
collection="share_url"
|
||||
)
|
||||
|
||||
for domain, cf_zone in cf_domain_zone_map.items():
|
||||
# 添加cf域名解析
|
||||
zone_id = safe_get_str(cf_zone, "id")
|
||||
if len(zone_id) <= 0:
|
||||
continue
|
||||
# print(zone_id)
|
||||
|
||||
# 获取域名对应的证书id
|
||||
cert = safe_get_dict(ng_cert_map, domain)
|
||||
cert_id = safe_get_int(cert, "id")
|
||||
# print(zone_id, cert_id)
|
||||
|
||||
# 分享域名
|
||||
share_l2_names = list()
|
||||
for i in range(50):
|
||||
random_str = generate_random_string(random.randint(8, 12))
|
||||
share_l2_names.append(random_str)
|
||||
|
||||
# 要添加nginx域名解析的域名
|
||||
need_add_nginx_anal_l2_names = list()
|
||||
for l2_name in share_l2_names:
|
||||
try:
|
||||
cf_add_record_ret = json.loads(cf_manager.add_record(zone_id, "47.242.233.23", l2_name, "A").json())
|
||||
ret_id = safe_get_str(cf_add_record_ret, "id")
|
||||
if len(ret_id) <= 0:
|
||||
logger.Error("cf_add_record fail, domain: {}, l2_name: {}, ret: {}".format(domain, l2_name, cf_add_record_ret))
|
||||
continue
|
||||
need_add_nginx_anal_l2_names.append(l2_name)
|
||||
except Exception as e:
|
||||
logger.Error("cf_add_record panic, domain: {}, l2_name: {}, err: {}".format(domain, l2_name, str(e)))
|
||||
|
||||
# 添加nginx域名解析
|
||||
need_add_nginx_anal_domain_names = list()
|
||||
for l2_name in need_add_nginx_anal_l2_names:
|
||||
need_add_nginx_anal_domain_names.append("{}.{}".format(l2_name, domain))
|
||||
batch_add_records_ret = npm.batch_add_records(need_add_nginx_anal_domain_names, "172.17.219.45", 3001, cert_id)
|
||||
logger.Info("batch_add_records ok, len: {}, domains: {}, ret: {}".format(
|
||||
len(need_add_nginx_anal_domain_names), need_add_nginx_anal_domain_names, batch_add_records_ret
|
||||
))
|
||||
|
||||
# 添加mongodb
|
||||
docs = list()
|
||||
for domain_name in need_add_nginx_anal_domain_names:
|
||||
doc = {
|
||||
"_id": domain_name,
|
||||
"ct": int(time.time()),
|
||||
"ut": 0,
|
||||
"status": "000",
|
||||
"api_res": "",
|
||||
"use_cnt": 0,
|
||||
"domain": domain,
|
||||
"l2_name": domain_name[:domain_name.find(".")],
|
||||
}
|
||||
docs.append(doc)
|
||||
mongo_ret = col_share_url.insert_many(docs)
|
||||
logger.Info("len(insert_ids): {}, ids: {}".format(len(mongo_ret.inserted_ids), mongo_ret.inserted_ids))
|
||||
|
||||
col_share_url.close()
|
||||
|
||||
|
||||
proc()
|
|
@ -9,6 +9,13 @@ from lib.all import *
|
|||
|
||||
MiZhiBo_Top_Domain = "mizhibo.live"
|
||||
MiZhiBo_Cert_Id = 12
|
||||
MiZhiBo_AK = "LTAI5t9GQLk8D63FPZFKiXMH"
|
||||
MiZhiBo_Secret = "QPgrEowuYKEYD0vp8fnW0Egri8lu04"
|
||||
|
||||
TieFenClub_Top_Domain = "tiefen.club"
|
||||
TieFenClub_Cert_Id = 15
|
||||
TieFenClub_AK = "LTAI5tMp5o4u6Twgm6hL9EQV"
|
||||
TieFenClub_Secret = "O7xAsKMnnWHwrlfvka30v6yr13Qxa3"
|
||||
|
||||
service_name = 'add_wx_share_url'
|
||||
log_dir = '.'
|
||||
|
@ -80,12 +87,12 @@ def proc(cnt, top_dm):
|
|||
)
|
||||
|
||||
for i in range(cnt):
|
||||
l2_host = generate_random_string(19)
|
||||
l2_host = generate_random_string(random.randint(15, 20))
|
||||
|
||||
# 添加域名解析
|
||||
add_domain_record(
|
||||
"LTAI5t9GQLk8D63FPZFKiXMH",
|
||||
"QPgrEowuYKEYD0vp8fnW0Egri8lu04",
|
||||
TieFenClub_AK,
|
||||
TieFenClub_Secret,
|
||||
"cn-hangzhou",
|
||||
top_dm,
|
||||
l2_host,
|
||||
|
@ -95,7 +102,7 @@ def proc(cnt, top_dm):
|
|||
|
||||
# 添加nginx
|
||||
dm = l2_host + "." + top_dm
|
||||
res = add_wx_share_url_to_nginx(dm, "172.16.0.183", 3003, MiZhiBo_Cert_Id)
|
||||
res = add_wx_share_url_to_nginx(dm, "172.16.0.183", 3003, TieFenClub_Cert_Id)
|
||||
logger.Info(res)
|
||||
|
||||
# 添加db
|
||||
|
@ -115,4 +122,4 @@ def proc(cnt, top_dm):
|
|||
col_share_url.close()
|
||||
|
||||
|
||||
proc(99, MiZhiBo_Top_Domain)
|
||||
proc(2, TieFenClub_Top_Domain)
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
from lib.all import *
|
||||
import cloudflare
|
||||
|
||||
|
||||
class CloudflareManager:
|
||||
def __init__(self):
|
||||
self.cf = cloudflare.Cloudflare(
|
||||
api_email="chengdewangyue@outlook.com",
|
||||
api_key="d03a3857ee796d8b8e584b8311127b334cc27"
|
||||
)
|
||||
|
||||
def __del__(self):
|
||||
self.cf.close()
|
||||
|
||||
def zone_list(self):
|
||||
ret = self.cf.zones.list(
|
||||
account={"id": "722b58c5ced87e7bfba175acb9a2a9d6"},
|
||||
per_page=1000
|
||||
)
|
||||
return ret
|
||||
|
||||
def create_zone(self, domain):
|
||||
ret = self.cf.zones.create(
|
||||
account={"id": "722b58c5ced87e7bfba175acb9a2a9d6"},
|
||||
name=domain
|
||||
)
|
||||
return ret
|
||||
|
||||
def add_record(self, zone_id, content, name, typ):
|
||||
ret = self.cf.dns.records.create(
|
||||
zone_id=zone_id,
|
||||
content=content,
|
||||
name=name,
|
||||
type=typ,
|
||||
proxied=False,
|
||||
ttl=60
|
||||
)
|
||||
return ret
|
||||
|
||||
|
||||
# cfm = CloudflareManager()
|
||||
# ret = cfm.add_record("60abfd3b47de6e0830b413b9fa6e9e1c", "47.242.233.23", "95s35e8s", "A")
|
||||
# print(ret.json())
|
||||
# ret = cfm.zone_list().json()
|
||||
# print(ret)
|
|
@ -0,0 +1,25 @@
|
|||
import random
|
||||
|
||||
random.seed()
|
||||
|
||||
letters = "acdefghijklmnopqrstuvwxyz"
|
||||
digits = "13567890"
|
||||
|
||||
base_domains = ["tiefen{}.top", "tiefen{}.click"]
|
||||
|
||||
idx = 0
|
||||
for base_dm in base_domains:
|
||||
for digit in digits:
|
||||
for letter in letters:
|
||||
idx += 1
|
||||
random_letter1 = letters[random.randint(0, len(letters) - 1)]
|
||||
random_letter2 = letters[random.randint(0, len(letters) - 1)]
|
||||
ran = random.randint(0, 2)
|
||||
if ran == 0:
|
||||
dm = base_dm.format(digit + letter + random_letter1)
|
||||
else:
|
||||
dm = base_dm.format(digit + letter + random_letter1 + random_letter2)
|
||||
print(dm)
|
||||
|
||||
if idx >= 70:
|
||||
break
|
|
@ -0,0 +1,89 @@
|
|||
import requests
|
||||
|
||||
from lib.all import *
|
||||
from namesilo.core import NameSilo
|
||||
|
||||
namesilo_api_key = "8a5bd1e9d44a52f15897f03a2"
|
||||
|
||||
|
||||
class NameSiloMgr:
|
||||
def __init__(self):
|
||||
self.client = NameSilo(token=namesilo_api_key, sandbox=False)
|
||||
|
||||
def delete_dns_record(self, domain, record_id):
|
||||
url = "https://www.namesilo.com/api/dnsDeleteRecord?version=1&type=json&key={}&domain={}&rrid={}".format(
|
||||
namesilo_api_key, domain, record_id
|
||||
)
|
||||
response = requests.get(url)
|
||||
res = json.loads(response.text)
|
||||
return res
|
||||
|
||||
def list_registered_nameservers(self, domain):
|
||||
url = "https://www.namesilo.com/api/listRegisteredNameServers?version=1&type=json&key={}&domain={}".format(
|
||||
namesilo_api_key, domain
|
||||
)
|
||||
response = requests.get(url)
|
||||
res = json.loads(response.text)
|
||||
return res
|
||||
|
||||
def delete_registered_nameserver(self, domain, cur_host):
|
||||
url = "https://www.namesilo.com/api/deleteRegisteredNameServer?version=1&type=json&key={}&domain={}¤t_host={}".format(
|
||||
namesilo_api_key, domain, cur_host
|
||||
)
|
||||
response = requests.get(url)
|
||||
res = json.loads(response.text)
|
||||
return res
|
||||
|
||||
def change_nameservers(self, domain, ns_list):
|
||||
url = "https://www.namesilo.com/api/changeNameServers?version=1&type=json&key={}&domain={}".format(
|
||||
namesilo_api_key, domain
|
||||
)
|
||||
if len(ns_list) >= 13:
|
||||
ns_list = ns_list[:13]
|
||||
idx = 0
|
||||
for ns in ns_list:
|
||||
idx += 1
|
||||
url += "&ns{}={}".format(idx, ns)
|
||||
# print(url)
|
||||
response = requests.get(url)
|
||||
res = json.loads(response.text)
|
||||
return res
|
||||
|
||||
def del_all_domain_dns_record(self):
|
||||
all_records = list()
|
||||
for item in self.client.list_domains():
|
||||
# print(type(item), item)
|
||||
domain = safe_get_str(item, "#text")
|
||||
try:
|
||||
records = self.client.list_dns_records(domain)
|
||||
if isinstance(records, list):
|
||||
for record in records:
|
||||
record_new = record
|
||||
record_new["domain"] = domain
|
||||
all_records.append(record_new)
|
||||
elif isinstance(records, dict):
|
||||
record_new = records
|
||||
record_new["domain"] = domain
|
||||
all_records.append(record_new)
|
||||
else:
|
||||
print("valid", records)
|
||||
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
|
||||
for r in all_records:
|
||||
domain = safe_get_str(r, "domain")
|
||||
record_id = safe_get_str(r, "record_id")
|
||||
ret = self.delete_dns_record(domain, record_id)
|
||||
print(domain, record_id, ret)
|
||||
|
||||
# def change_all_domain_nameservers(self):
|
||||
# for item in self.client.list_domains():
|
||||
# # print(type(item), item)
|
||||
# domain = safe_get_str(item, "#text")
|
||||
# ret = self.change_nameservers(domain)
|
||||
# print(domain, ret)
|
||||
|
||||
#
|
||||
# s = NameSiloMgr()
|
||||
# s.change_nameservers("xxxx.aa", ["1111111111111111111.cc", "222222222222.cc"])
|
|
@ -0,0 +1,116 @@
|
|||
import json
|
||||
|
||||
from lib.all import *
|
||||
|
||||
|
||||
def get_all_cert_map():
|
||||
headers = {
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,ko;q=0.8,ja;q=0.7,en;q=0.6',
|
||||
'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcGkiLCJzY29wZSI6WyJ1c2VyIl0sImF0dHJzIjp7ImlkIjoxfSwiZXhwaXJlc0luIjoiMWQiLCJqdGkiOiJndVVDWnNjbmE1TzljdzFoIiwiaWF0IjoxNzMzOTc2OTU5LCJleHAiOjE3MzQwNjMzNTl9.TWcVzTMVR1wgphBYYfuH7BhOkrL8vqolzLBvgRU9f5KvkWOWLeF2g0P69YefqQHc32NH6YB81PWUlr_ZFQeeMnGDmcPGk0HvzZawMau44GKCB7iADFpGwWhrQvxYQuvm_f6KeYvLoOJsfTketHu_YoFNlPBhgRJ83uyLzmgd8w2-gdgvWuxHPbDkIO_k3eyw5rqSxjS6lNlo7SlyBCSW3FTgRcOAhOWI0uf87s-RwTHpZxLTDje6QH4PKYMUOJCzhojoxl5PxgDerA5ru0M13bdTAnBGMYjYHP_2X7Xa9DgwZ0yMxDLLIhnrntXQzKFEjv79alehPZe6ENQTHJvNBQ',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'Referer': 'http://47.242.233.23:81/nginx/certificates',
|
||||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
params = {
|
||||
'expand': 'owner',
|
||||
}
|
||||
|
||||
response = requests.get('http://47.242.233.23:81/api/nginx/certificates', params=params, headers=headers, verify=False)
|
||||
res = json.loads(response.text)
|
||||
|
||||
cert_map = dict()
|
||||
for cert in res:
|
||||
domain_names = safe_get_list(cert, "domain_names")
|
||||
for domain_name in domain_names:
|
||||
dmn = domain_name.replace("*.", "")
|
||||
cert_map[dmn] = cert
|
||||
|
||||
return cert_map
|
||||
|
||||
|
||||
def batch_apply_cert(domain_names):
|
||||
headers = {
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,ko;q=0.8,ja;q=0.7,en;q=0.6',
|
||||
'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcGkiLCJzY29wZSI6WyJ1c2VyIl0sImF0dHJzIjp7ImlkIjoxfSwiZXhwaXJlc0luIjoiMWQiLCJqdGkiOiJndVVDWnNjbmE1TzljdzFoIiwiaWF0IjoxNzMzOTc2OTU5LCJleHAiOjE3MzQwNjMzNTl9.TWcVzTMVR1wgphBYYfuH7BhOkrL8vqolzLBvgRU9f5KvkWOWLeF2g0P69YefqQHc32NH6YB81PWUlr_ZFQeeMnGDmcPGk0HvzZawMau44GKCB7iADFpGwWhrQvxYQuvm_f6KeYvLoOJsfTketHu_YoFNlPBhgRJ83uyLzmgd8w2-gdgvWuxHPbDkIO_k3eyw5rqSxjS6lNlo7SlyBCSW3FTgRcOAhOWI0uf87s-RwTHpZxLTDje6QH4PKYMUOJCzhojoxl5PxgDerA5ru0M13bdTAnBGMYjYHP_2X7Xa9DgwZ0yMxDLLIhnrntXQzKFEjv79alehPZe6ENQTHJvNBQ',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'Origin': 'http://47.242.233.23:81',
|
||||
'Referer': 'http://47.242.233.23:81/nginx/certificates',
|
||||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
json_data = {
|
||||
'domain_names': domain_names,
|
||||
'meta': {
|
||||
'letsencrypt_email': 'jueweijue@gmail.com',
|
||||
'dns_challenge': True,
|
||||
'dns_provider': 'cloudflare',
|
||||
'dns_provider_credentials': '# Cloudflare API token\r\ndns_cloudflare_api_token=OYrExEPmDzx5lYnFrg9c8qU05k-3SgjVe3Us6NoL',
|
||||
'letsencrypt_agree': True,
|
||||
},
|
||||
'provider': 'letsencrypt',
|
||||
}
|
||||
|
||||
response = requests.post('http://47.242.233.23:81/api/nginx/certificates', headers=headers, json=json_data, verify=False)
|
||||
res = json.loads(response.text)
|
||||
return res
|
||||
|
||||
|
||||
def batch_add_records(domain_names, forward_host, forward_port, cert_id):
|
||||
headers = {
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,ko;q=0.8,ja;q=0.7,en;q=0.6',
|
||||
'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcGkiLCJzY29wZSI6WyJ1c2VyIl0sImF0dHJzIjp7ImlkIjoxfSwiZXhwaXJlc0luIjoiMWQiLCJqdGkiOiI3U05KaHVLOWR0YjdmRExDIiwiaWF0IjoxNzMzOTgyMTMyLCJleHAiOjE3MzQwNjg1MzJ9.mhHrgOATwgRQQ0GI3opDw-qck_TV3c7Ka4TEkDi0ORO3e8iKcEsELd3zfgOzEV5oLHWoGUcOpOn2LPSp4GLMqzbmDE4PWQ4xsAbgT-LCSaN3NRTGGo4XwMkmAYIRrPRIWTqlaR2FwXPYVJocVNbKm5TWJF57dmjFQPrikAxZEJfXewpGPSCF6qnSlCQeFK_lx1um_XIkLxnBLnGy3KsGMhcOtgJ4wT8DRiyd2htYztcv-4TFzhyDsc2U2ge6OfXhPVTHILEPPiCXSgBPjlEx63ilG2w6vaUam1cafRIOgDEqhVT730NmhZVSD8hmRym8t8IPf_6fMgf3Mlv7GrcEyw',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'Origin': 'http://47.242.233.23:81',
|
||||
'Referer': 'http://47.242.233.23:81/nginx/proxy',
|
||||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
json_data = {
|
||||
'domain_names': domain_names,
|
||||
'forward_scheme': 'http',
|
||||
'forward_host': forward_host,
|
||||
'forward_port': forward_port,
|
||||
'allow_websocket_upgrade': True,
|
||||
'access_list_id': '0',
|
||||
'certificate_id': cert_id,
|
||||
'ssl_forced': True,
|
||||
'meta': {
|
||||
'letsencrypt_agree': False,
|
||||
'dns_challenge': False,
|
||||
},
|
||||
'advanced_config': '',
|
||||
'locations': [],
|
||||
'block_exploits': False,
|
||||
'caching_enabled': False,
|
||||
'http2_support': False,
|
||||
'hsts_enabled': False,
|
||||
'hsts_subdomains': False,
|
||||
}
|
||||
response = requests.post('http://47.242.233.23:81/api/nginx/proxy-hosts', headers=headers, json=json_data, verify=False)
|
||||
res = json.loads(response.text)
|
||||
return res
|
||||
|
||||
# cert_map = get_all_cert_map()
|
||||
# print(cert_map["*.tiefen888.top"])
|
||||
|
||||
#
|
||||
# dms = list()
|
||||
# ns_domains = ns_manager.client.list_domains()
|
||||
# for nsdm in ns_domains:
|
||||
# dm = "*." + safe_get_str(nsdm, "#text")
|
||||
# if dm in cert_map.keys():
|
||||
# print(dm)
|
||||
# continue
|
||||
# dms.append(dm)
|
||||
#
|
||||
# print(apply_cert(dms))
|
||||
|
||||
#
|
||||
# print(cert_map)
|
|
@ -0,0 +1,65 @@
|
|||
from cloudflare_manager import *
|
||||
from namesilo_manager import *
|
||||
|
||||
cf_manager = CloudflareManager()
|
||||
ns_manager = NameSiloMgr()
|
||||
|
||||
# 需要重新设置nameserver的域名
|
||||
# 已成功激活的域名
|
||||
# 需要添加并激活的域名
|
||||
|
||||
# cloudflare 中已存在的域名
|
||||
list_df_res = json.loads(cf_manager.zone_list().json())
|
||||
list_websites = safe_get_list(list_df_res, "result")
|
||||
cf_domain_stat_map = dict()
|
||||
for web in list_websites:
|
||||
domain = safe_get_str(web, "name")
|
||||
cf_domain_stat_map[domain] = web
|
||||
|
||||
ns_domains = ns_manager.client.list_domains()
|
||||
idxx = 0
|
||||
for ns_domain in ns_domains:
|
||||
idxx += 1
|
||||
domain = safe_get_str(ns_domain, "#text")
|
||||
|
||||
cf_stat = safe_get_dict(cf_domain_stat_map, domain)
|
||||
status = safe_get_str(cf_stat, "status")
|
||||
print(idxx, domain, status)
|
||||
if status == "active":
|
||||
continue
|
||||
if len(status) > 0:
|
||||
continue
|
||||
|
||||
# 如果不在cloudflare里面,在cloudflare创建zone
|
||||
if domain not in cf_domain_stat_map.keys():
|
||||
cf_stat = json.loads(cf_manager.create_zone(domain).json())
|
||||
|
||||
# 从namesilo删除域名解析
|
||||
all_ns_dns_records = list()
|
||||
try:
|
||||
ns_dns_records = ns_manager.client.list_dns_records(domain)
|
||||
if isinstance(ns_dns_records, list):
|
||||
for record in ns_dns_records:
|
||||
record_new = record
|
||||
record_new["domain"] = domain
|
||||
all_ns_dns_records.append(record_new)
|
||||
elif isinstance(ns_dns_records, dict):
|
||||
record_new = ns_dns_records
|
||||
record_new["domain"] = domain
|
||||
all_ns_dns_records.append(record_new)
|
||||
else:
|
||||
print(idxx, domain, "invalid", ns_dns_records)
|
||||
except Exception as e:
|
||||
print(idxx, domain, "invalid", str(e))
|
||||
|
||||
for r in all_ns_dns_records:
|
||||
domain = safe_get_str(r, "domain")
|
||||
record_id = safe_get_str(r, "record_id")
|
||||
ret = ns_manager.delete_dns_record(domain, record_id)
|
||||
print(idxx, domain, record_id, ret)
|
||||
|
||||
# 把namesilo nameserver替换成 cf的nameservers
|
||||
cf_nameservers = safe_get_list(cf_stat, "name_servers")
|
||||
print(idxx, domain, cf_nameservers)
|
||||
chane_nss_ret = ns_manager.change_nameservers(domain, cf_nameservers)
|
||||
print(idxx, domain, cf_nameservers, chane_nss_ret)
|
|
@ -0,0 +1,41 @@
|
|||
import asyncio
|
||||
import websockets
|
||||
|
||||
|
||||
async def websocket_client(uri):
|
||||
"""
|
||||
A simple WebSocket client that connects to a specified URI,
|
||||
sends a message, receives data, and prints status codes.
|
||||
"""
|
||||
try:
|
||||
async with websockets.connect(uri) as websocket:
|
||||
print(f"WebSocket connection established. Status code: {websocket.response.status_code}")
|
||||
|
||||
message = "Hello from client!"
|
||||
await websocket.send(message)
|
||||
print(f"Sent message: {message}")
|
||||
|
||||
try:
|
||||
async for message in websocket: # Iterate through incoming messages
|
||||
print(f"Received message: {message}")
|
||||
except websockets.exceptions.ConnectionClosedError as e:
|
||||
print(f"Connection closed with code {e.code} and reason: {e.reason}")
|
||||
except Exception as e:
|
||||
print(f"An unexpected error occurred: {e}")
|
||||
|
||||
except websockets.exceptions.InvalidStatusCode as e:
|
||||
print(f"Connection failed with status code {e.status_code} and reason: {str(e)}")
|
||||
except OSError as e:
|
||||
print(f"OSError: {e}") # Handle potential OS errors like connection refused
|
||||
except Exception as e:
|
||||
print(f"An unexpected error occurred during connection: {e}")
|
||||
|
||||
|
||||
async def main():
|
||||
uri = "wss://wsdebug.tiefen.fun/ws" # Example WebSocket echo server
|
||||
# uri = "wss://your_websocket_server_url" # Replace with your server URL if needed. Note 'wss' for secure connections.
|
||||
await websocket_client(uri)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
48
ttt/x.py
48
ttt/x.py
|
@ -1,9 +1,43 @@
|
|||
from lib.all import *
|
||||
import requests
|
||||
|
||||
st = get_today_zero_time() - 86400 * 7
|
||||
et = st + 86400
|
||||
cookies = {
|
||||
'mid': '43',
|
||||
'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJtaWQiOjQzLCJ0b2tlbl91dWlkIjoxODY2MDU1MDA0MTU1MDQzODQwfQ.NJRWK6o23nhPjnFCZz20N0gnjuLW8OD3rc7xRymAnzk',
|
||||
}
|
||||
|
||||
print(
|
||||
get_time_str_by_ts(st),
|
||||
get_time_str_by_ts(et)
|
||||
)
|
||||
headers = {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,ko;q=0.8,ja;q=0.7,en;q=0.6',
|
||||
'content-type': 'application/json',
|
||||
# 'cookie': 'mid=43; token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJtaWQiOjQzLCJ0b2tlbl91dWlkIjoxODY2MDU1MDA0MTU1MDQzODQwfQ.NJRWK6o23nhPjnFCZz20N0gnjuLW8OD3rc7xRymAnzk',
|
||||
'origin': 'https://testapp.tiefen.fun',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://testapp.tiefen.fun/login',
|
||||
'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"macOS"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
||||
'x-req-source-tf': 'wittgenstein',
|
||||
}
|
||||
|
||||
json_data = {
|
||||
'b_mid': 43,
|
||||
'b_ch': 'h5',
|
||||
'b_ts': 1734078412314,
|
||||
'b_token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJtaWQiOjQzLCJ0b2tlbl91dWlkIjoxODY2MDU1MDA0MTU1MDQzODQwfQ.NJRWK6o23nhPjnFCZz20N0gnjuLW8OD3rc7xRymAnzk',
|
||||
'b_did': 'Mozilla/5.0 (Macintosh; Intel Ma',
|
||||
'mobile_phone': 'D1dT7zvxB3HvyHqqB6fzTU/pl1G++EmgJZPcSWkMpJxUa2VtL1Szg+rlFP4ytbsCIh/FLhncOffT4r/N4Z4AZw==',
|
||||
'region_code': '86',
|
||||
'password': 'dec61c167c886f5382b0d317eeab5008',
|
||||
}
|
||||
|
||||
response = requests.post('https://testapp.tiefen.fun/api/login/login_by_pswd', cookies=cookies, headers=headers, json=json_data)
|
||||
print(response.headers)
|
||||
|
||||
# Note: json_data will not be serialized by requests
|
||||
# exactly as it was in the original request.
|
||||
#data = '{"b_mid":43,"b_ch":"h5","b_ts":1734078412314,"b_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJtaWQiOjQzLCJ0b2tlbl91dWlkIjoxODY2MDU1MDA0MTU1MDQzODQwfQ.NJRWK6o23nhPjnFCZz20N0gnjuLW8OD3rc7xRymAnzk","b_did":"Mozilla/5.0 (Macintosh; Intel Ma","mobile_phone":"D1dT7zvxB3HvyHqqB6fzTU/pl1G++EmgJZPcSWkMpJxUa2VtL1Szg+rlFP4ytbsCIh/FLhncOffT4r/N4Z4AZw==","region_code":"86","password":"dec61c167c886f5382b0d317eeab5008"}'
|
||||
#response = requests.post('https://testapp.tiefen.fun/api/login/login_by_pswd', cookies=cookies, headers=headers, data=data)
|
||||
|
|
|
@ -255,7 +255,7 @@ class S:
|
|||
ch_list_db.append(ch)
|
||||
ch_list = ch_list_income(ch_list_db)
|
||||
|
||||
csv_w = Csv("4104838_11月_主播收益_.csv", ["时间", "钻石变化", "描述"])
|
||||
csv_w = Csv("352039_11月_主播收益_.csv", ["时间", "钻石变化", "描述"])
|
||||
for ch in ch_list:
|
||||
d = [
|
||||
get_time_str_by_ts(ch.ct), ch.change, ch.desc,
|
||||
|
@ -265,7 +265,7 @@ class S:
|
|||
|
||||
s = S()
|
||||
s.proc(
|
||||
954725,
|
||||
31476,
|
||||
get_ts_by_str("2024-11-01 00:00:00"),
|
||||
get_ts_by_str("2024-12-01 00:00:00"),
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue