Files
KingJin-web-zy/util/IP代理自动加白名单.py
2025-09-13 14:20:00 +08:00

153 lines
5.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cron: 10 */2 * * *
# new Env('更新IP代理白名单');
import os
# 长期套餐大额流量电话卡办理地址https://img.hnking.cn//blog/202504141427660.png
## 携趣代理地址 https://www.xiequ.cn/index.html?d630539f
## 星空代理地址 https://www.xkdaili.com/
## 巨量代理地址 https://www.juliangip.com/user/reg?inviteCode=1040216
# 携趣环境变量 export XIEQU='UID=xxx;UKEY=xxx'
# 星空环境变量 export XK='APIKEY=xxx;SIGN=xxx'
# 巨量环境变量 export JULIANG='KEY=xxx;TRADE_NO=xxx'
import requests
import hashlib
import urllib.parse
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 get_current_ip():
"""获取当前 IP 地址"""
try:
response = requests.get('https://httpbin.org/ip')
response.raise_for_status()
res = response.json().get('origin')
return res
except requests.exceptions.RequestException as e:
print(f"Failed to fetch the current IP: {e}")
return get_current_ip2()
# https://ip.3322.net
def get_current_ip2():
api_url = f"https://ip.3322.net"
try:
response = requests.get(api_url)
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
print(f"Failed to fetch information for IP: {e}")
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
print(data)
arr = data.split(',')
print(arr)
if ip in arr:
return '携趣白名单ip未变化'
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 main():
ip = get_current_ip()
print('当前ip地址', ip)
print('''#长期套餐大额流量电话卡办理地址https://img.hnking.cn//blog/202504141427660.png
## 携趣代理地址 https://www.xiequ.cn/index.html?d630539f
## 星空代理地址 https://www.xkdaili.com/
## 巨量代理地址 https://www.juliangip.com/user/reg?inviteCode=1040216
# 携趣环境变量 export XIEQU='UID=xxx;UKEY=xxx'
# 星空环境变量 export XK='APIKEY=xxx;SIGN=xxx'
# 巨量环境变量 export JULIANG='KEY=xxx;TRADE_NO=xxx'
''')
# 从青龙面板 获取变量
# export XIEQU='UID=xxx;UKEY=xxx'
# export XK='APIKEY=xxx;SIGN=xxx'
# export JULIANG='KEY=xxx;TRADE_NO=xxx'
JULIANG_KEY = '' # 填入巨量的 Key
JULIANG_TRADE_NO = '' # 填入巨量的 Trade No
XK_APIKEY = '' # 填入星空的 API Key
XK_SIGN = '' # 填入星空的 Sign
XIEQU_UID = '' # 填入携趣的 UID
XIEQU_UKEY = '' # 填入携趣的 UKEY
JULIANG = os.getenv('JULIANG')
XK = os.getenv('XK')
XIEQU = os.getenv('XIEQU')
if XIEQU != None:
XIEQU_UID = XIEQU.split(';')[0].split('=')[1]
XIEQU_UKEY = XIEQU.split(';')[1].split('=')[1]
if JULIANG != None:
JULIANG_KEY = JULIANG.split(';')[0].split('=')[1]
JULIANG_TRADE_NO = JULIANG.split(';')[1].split('=')[1]
if XK != None:
XK_APIKEY = XK.split(';')[0].split('=')[1]
XK_SIGN = XK.split(';')[1].split('=')[1]
print('更新当前IP', ip)
if JULIANG_KEY != None and JULIANG_TRADE_NO != None:
print('更新巨量白名单结果:', update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO))
if XK_APIKEY != None and XK_SIGN != None:
print('更新星空白名单结果:', update_xk_white_list(ip, XK_APIKEY, XK_SIGN))
if XIEQU_UID != None and XIEQU_UKEY != None:
print('更新携趣白名单结果:', update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY))
if __name__ == "__main__":
main()