mirror of
https://github.com/wq-h/qinglong.git
synced 2026-11-06 02:56:47 +08:00
148 lines
5.6 KiB
Python
148 lines
5.6 KiB
Python
# cron: 10 */2 * * *
|
|
# new Env('更新IP代理白名单');
|
|
|
|
import requests
|
|
import hashlib
|
|
import urllib.parse
|
|
import os
|
|
|
|
from sendNotify import send # 添加通知发送模块
|
|
|
|
# JULIANG_KEY = '' # 填入巨量的API密钥,点击设置授权信息按钮查看,获取地址 https://www.juliangip.com/users/product/time
|
|
# JULIANG_TRADE_NO = '' # 填入巨量的业务编号
|
|
# XK_APIKEY = '' # 填入星空的 API Key
|
|
# XK_SIGN = '' # 填入星空的 Sign
|
|
# XIEQU_UID = '' # 填入携趣的 UID,获取地址 https://www.xiequ.cn/redirect.aspx?act=MyIpWhiteList.aspx
|
|
# XIEQU_UKEY = '' # 填入携趣的 UKEY
|
|
# YYY_UID = '' # 填入优亦云的用户套餐ID
|
|
# YYY_TOKEN = '' # 填入优亦云的TOKEN
|
|
# 巨量
|
|
JULIANG_KEY = ''
|
|
JULIANG_TRADE_NO = ''
|
|
# 星空
|
|
XK_APIKEY = ''
|
|
XK_SIGN = ''
|
|
# 携趣
|
|
XIEQU_UID = ''
|
|
XIEQU_UKEY = ''
|
|
# 优亦云
|
|
YYY_UID = ''
|
|
YYY_TOKEN = ''
|
|
|
|
# 青龙环境变量(若上面不填写,则读取青龙环境变量)
|
|
JULIANG_KEY = JULIANG_KEY if JULIANG_KEY else os.getenv("JULIANG_KEY")
|
|
JULIANG_TRADE_NO = JULIANG_TRADE_NO if JULIANG_TRADE_NO else os.getenv("JULIANG_TRADE_NO")
|
|
XK_APIKEY = XK_APIKEY if XK_APIKEY else os.getenv("XK_APIKEY")
|
|
XK_SIGN = XK_SIGN if XK_SIGN else os.getenv("XK_SIGN")
|
|
XIEQU_UID = XIEQU_UID if XIEQU_UID else os.getenv("XIEQU_UID")
|
|
XIEQU_UKEY = XIEQU_UKEY if XIEQU_UKEY else os.getenv("XIEQU_UKEY")
|
|
YYY_UID = YYY_UID if YYY_UID else os.getenv("YYY_UID")
|
|
YYY_TOKEN = YYY_TOKEN if YYY_TOKEN else os.getenv("YYY_TOKEN")
|
|
|
|
|
|
|
|
|
|
class SignKit:
|
|
|
|
@staticmethod
|
|
def md5_sign(params, secret):
|
|
sign_content = SignKit.get_sign_content(params)
|
|
return hashlib.md5((sign_content + '&key=' + secret).encode('utf-8')).hexdigest()
|
|
|
|
@staticmethod
|
|
def get_sign_content(params):
|
|
params.pop('sign', None) # 删除 sign
|
|
sorted_params = sorted(params.items())
|
|
sign_content = '&'.join([f"{k}={str(v)}" for k, v in sorted_params if str(v) is not None and not str(v).startswith('@')])
|
|
return sign_content
|
|
|
|
def get_current_ip():
|
|
response = requests.get('https://myip.ipip.net/json')
|
|
data = response.json()
|
|
return data['data']['ip']
|
|
|
|
def update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO):
|
|
if JULIANG_KEY and JULIANG_TRADE_NO:
|
|
params = {
|
|
'new_ip': ip,
|
|
'reset': '1',
|
|
'trade_no': JULIANG_TRADE_NO
|
|
}
|
|
sign = SignKit.md5_sign(params, JULIANG_KEY)
|
|
query_string = urllib.parse.urlencode(params) + "&sign=" + sign
|
|
|
|
url = f'http://v2.api.juliangip.com/dynamic/replaceWhiteIp?{query_string}'
|
|
response = requests.get(url)
|
|
return response.text
|
|
|
|
def update_xk_white_list(ip, XK_APIKEY, XK_SIGN):
|
|
if XK_APIKEY and XK_SIGN:
|
|
url = f'http://api2.xkdaili.com/tools/XApi.ashx?apikey={XK_APIKEY}&type=addwhiteip&sign={XK_SIGN}&flag=8&ip={ip}'
|
|
response = requests.get(url)
|
|
return response.text
|
|
|
|
def update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY):
|
|
if XIEQU_UID and XIEQU_UKEY:
|
|
url = f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=get'
|
|
response = requests.get(url)
|
|
data = response.text
|
|
arr = data.split(',')
|
|
if ip not in arr:
|
|
requests.get(f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=del&ip=all')
|
|
response = requests.get(f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=add&ip={ip}')
|
|
return '更新xiequ白名单成功' if response.status_code == 200 else '更新xiequ白名单出错'
|
|
else:
|
|
return '携趣白名单ip未变化'
|
|
|
|
def update_yyy_white_list(ip, YYY_UID, YYY_TOKEN):
|
|
if YYY_UID and YYY_TOKEN:
|
|
url = f'http://data.yyyip.cn:88/whiteip_api?method=list&token={YYY_TOKEN}'
|
|
response = requests.get(url)
|
|
data = response.json()
|
|
arr = [d["ip"] for d in data['data']]
|
|
ipstr = ','.join(map(str, arr))
|
|
if ip not in arr:
|
|
requests.get(f'http://data.yyyip.cn:88/whiteip_api?method=del&token={YYY_TOKEN}&ip={ipstr}')
|
|
response = requests.get(f'http://data.yyyip.cn:88/whiteip_api?method=add&token={YYY_TOKEN}&upackid={YYY_UID}&ip={ip}')
|
|
return response.json()['msg']
|
|
# return '更新优亦云白名单成功' if response.status_code == 200 else '更新优亦云白名单出错'
|
|
else:
|
|
return '优亦云白名单ip未变化'
|
|
|
|
|
|
def main():
|
|
ip = get_current_ip()
|
|
print('当前ip地址:', ip)
|
|
|
|
res1 = update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO)
|
|
res2 = update_xk_white_list(ip, XK_APIKEY, XK_SIGN)
|
|
res3 = update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY)
|
|
res4 = update_yyy_white_list(ip, YYY_UID, YYY_TOKEN)
|
|
|
|
print('更新巨量白名单结果:', res1)
|
|
print('更新星空白名单结果:', res2)
|
|
print('更新携趣白名单结果:', res3)
|
|
print('更新优亦云白名单结果:', res4)
|
|
|
|
# 判断是否有实际变更(不是 None 且不是“未变化”)
|
|
meaningful_results = []
|
|
if res1 and '未变化' not in res1:
|
|
meaningful_results.append(f"巨量:{res1}")
|
|
if res2 and '未变化' not in res2:
|
|
meaningful_results.append(f"星空:{res2}")
|
|
if res3 and '未变化' not in res3:
|
|
meaningful_results.append(f"携趣:{res3}")
|
|
if res4 and '未变化' not in res4:
|
|
meaningful_results.append(f"优亦云:{res4}")
|
|
|
|
if meaningful_results:
|
|
msg = f"""📝 当前IP地址:{ip}
|
|
🔄 有效更新结果:
|
|
""" + "\n".join(meaningful_results)
|
|
send("IP白名单更新通知", msg)
|
|
else:
|
|
print("无有效更新,无需发送通知。")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |