raw action

This commit is contained in:
lwl0608 2024-12-24 18:08:07 +08:00
parent ff38ec04e9
commit afb7179d05
18 changed files with 735 additions and 32 deletions

6
.idea/encodings.xml Normal file
View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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() # 确保所有消息都已发送

112
bigdata/raw_action.py Normal file
View File

@ -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)

View File

@ -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)

View File

@ -0,0 +1,4 @@
from lib.all import *
class S:
def __init__(self):

8
lib/odps.py Normal file
View File

@ -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)

104
share/add_records.py Normal file
View File

@ -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()

View File

@ -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)

View File

@ -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)

25
share/gen_domains.py Normal file
View File

@ -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

89
share/namesilo_manager.py Normal file
View File

@ -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={}&current_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"])

View File

@ -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)

65
share/oversea_websites.py Normal file
View File

@ -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)

41
ttt/wss.py Normal file
View File

@ -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())

View File

@ -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)

View File

@ -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"),
)