chenmi2017 发表于 2024-10-10 10:58

自动更新提交代{过}{滤}理白名单

玩青龙面板可以配置代{过}{滤}理,研究了一下,第一次玩代{过}{滤}理。刚发现要更新代{过}{滤}理白名单的时候,感觉玩不下去了,因为我是家庭宽带搭建的服务器,虽然有公网IP但是是变法的。

看到白名单管理接口,发现是HTTP,然后就简单的写了个python脚本get一下。
核心函数
def get_ip_info():
    # 当前代{过}{滤}理白名单
    dl_ip = requests.get('换自己的链接,获取白名单链接').text.strip()
    # 当前公网ip
    gw_ip = requests.get('https://ipv4.icanhazip.com').text.strip()
    return gw_ip, dl_ip

def ch_ip_info(gw_ip, dl_ip):
    if dl_ip != gw_ip:
      print('当前公网ip:', gw_ip, '代{过}{滤}理白名单ip:', dl_ip)
      requests.get('换自己的链接,删除所有白名单链接')
      requests.get('换自己的链接,添加白名单链接' + gw_ip)
      return 0
    else:
      return 1


加载青龙面板通知完整代码

import requests
import os,sys

def get_ip_info():
    # 当前代{过}{滤}理白名单
    dl_ip = requests.get('换自己的链接,获取白名单链接').text.strip()
    # 当前公网ip
    gw_ip = requests.get('https://ipv4.icanhazip.com').text.strip()
    return gw_ip, dl_ip

def ch_ip_info(gw_ip, dl_ip):
    if dl_ip != gw_ip:
      print('当前公网ip:', gw_ip, '代{过}{滤}理白名单ip:', dl_ip)
      requests.get('换自己的链接,删除所有白名单链接')
      requests.get('换自己的链接,添加白名单链接' + gw_ip)
      return 0
    else:
      return 1



def load_send():
    global send
    cur_path = os.path.abspath(os.path.dirname(__file__))
    sys.path.append(cur_path)
    if os.path.exists(cur_path + "/notify.py"):
      try:
            from notify import send
      except:
            send = False
            print("加载通知服务失败~")
    else:
      send = False
      print("加载通知服务失败~")




msgs=''


for i in range(5):
    try:
      response = requests.get('ddns域名')
      if response.status_code == 200:
            print('访问ddns域名成功,状态码:', response.status_code)
            msgs += f'第{i+1}次,访问ddns域名成功,状态码:{response.status_code}\n'
            break
    except requests.RequestException as e:
      print('触发ddns异常:', e)
      msgs += f'第{i+1}次,触发ddns异常: {e}\n'

keygo = 0   
for i in range(5):   
    try:
      gw_ip, dl_ip = get_ip_info()
    except requests.RequestException as e:
      print('获取IP信息失败:', e)
      keygo = 1
      msgs += f'\n\n获取IP信息失败: {e}\n'
      break

    try:            
      get_key = ch_ip_info(gw_ip, dl_ip)
      if get_key == 1:
            if i == 0:
                print('当前公网ip未变更:')
                print('当前公网ip:', gw_ip, '代{过}{滤}理白名单ip:', dl_ip)
                msgs +=f'\n\nIP未变更,直接访问地址http://{gw_ip}:6002\n'
                break
            else:
                print("这是第", i + 1, "次循环")
                print('更新成功:')
                print('当前公网ip:', gw_ip, '代{过}{滤}理白名单ip:', dl_ip)
                msgs +=f'\n\n更新IP成功,直接访问地址http://{gw_ip}:6002\n'
                load_send()
                send('代{过}{滤}理IP白名单提交',msgs)
                break
    except requests.RequestException as e:
      print("这是第", i + 1, "次循环")
      print('更新代{过}{滤}理白名单IP信息失败:', e)
      msgs += f'\n\n第{i+1}次,更新代{过}{滤}理白名单IP信息失败: {e}\n'
      load_send()
      send('代{过}{滤}理IP白名单提交',msgs)


131486352 发表于 2024-10-10 15:26

家里的宽带怎么搭建服务器有教程吗,想了解下

chenmi2017 发表于 2024-10-11 08:27

131486352 发表于 2024-10-10 15:26
家里的宽带怎么搭建服务器有教程吗,想了解下

没那么高级,你就想一下电脑长期不关机,就是服务器了!其它的要具体看你要开什么服务,网站,文件共享。。。。。。。。。。

131486352 发表于 2024-10-11 10:58

chenmi2017 发表于 2024-10-11 08:27
没那么高级,你就想一下电脑长期不关机,就是服务器了!其它的要具体看你要开什么服务,网站,文件共享。 ...

电脑的话只能连接同wifi的设备才可以访问,不知道怎么外网访问{:1_937:}

chenmi2017 发表于 2024-10-14 09:25

131486352 发表于 2024-10-11 10:58
电脑的话只能连接同wifi的设备才可以访问,不知道怎么外网访问

如果能申请到ipv4公网IP就可以,但是家用都是动态地址会变。如果是用的路由器拨号上网,可以找找ddns。据说还有一种基于ipv6,一般如果宽带支持ipv6那基本上就能获取到公网ipv6地址,但是路由器不一定知道ipv6的ddns。就得研究IPV6ddns搭建了。或者不走ddns,就如我上面的代码有一部分是获取当前出口地址,想办法发送出来,可以是通过邮件等!然后直接通过ip访问。

131486352 发表于 2024-10-14 09:35

chenmi2017 发表于 2024-10-14 09:25
如果能申请到ipv4公网IP就可以,但是家用都是动态地址会变。如果是用的路由器拨号上网,可以找找ddns。据 ...

谢谢答疑
页: [1]
查看完整版本: 自动更新提交代{过}{滤}理白名单