找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 326|回复: 1

分享一个解决重启后等半天ddns没更新的办法,不完美

[复制链接]

新建一个cloudflare workers 绑定KV






编辑workers.js代码
  1. export default {
  2.   async fetch(request, env, ctx) {
  3.     // 设置默认 Cache-Control 头信息
  4.     const defaultHeaders = {
  5.       'Cache-Control': 'no-store, no-cache, must-revalidate',
  6.       'Pragma': 'no-cache',
  7.       'Expires': '0',
  8.     };

  9.     // 设置密码
  10.     const password = null;

  11.     // 从请求中提取信息
  12.     const { url, headers } = request;
  13.     const host = headers.get('host');
  14.     const visitorIP = headers.get('cf-connecting-ip');

  15.     const queryParams = new URL(url).searchParams;
  16.     // 获取'password'参数值
  17.     const passwordValue = queryParams.get('password');
  18.     if (password !== passwordValue) {
  19.       // 密码不正确退出
  20.       return new Response('', { status: 404, headers: defaultHeaders });
  21.     }
  22.     // 获取'domain'参数值
  23.     const paramValue = queryParams.get('domain');
  24.     // 定义用于验证标准域名的正则表达式
  25.     const domainRegex = /^[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+$/;
  26.     const isValidDomain = domainRegex.test(paramValue);

  27.     // 处理不同的主机值
  28.     if (host === 'set-ip.xxx.xxx') {
  29.       // 如果是有效的域名,使用域名作为键,否则使用 'ddnsIp'
  30.       const key = isValidDomain ? paramValue : 'ddnsIp';

  31.       // 获取之前存储的IP
  32.       const storedIP = await env.DDNS.get(key);

  33.       // 如果新IP与存储的IP相同,则不执行更新
  34.       if (storedIP !== visitorIP) {
  35.         await env.DDNS.put(key, visitorIP);
  36.       }

  37.       return new Response('DDNS IP 设置成功!', { status: 200, headers: defaultHeaders });
  38.     }

  39.     if (host === 'get-ip.xxx.xxx') {
  40.       // 如果是有效的域名,使用域名作为键,否则使用 'ddnsIp'
  41.       const key = isValidDomain ? paramValue : 'ddnsIp';
  42.       const ddnsIp = await env.DDNS.get(key);

  43.       if (ddnsIp !== null) {
  44.         return new Response(ddnsIp, { status: 200, headers: defaultHeaders });
  45.       } else {
  46.         return new Response('DDNS IP 未找到!', { status: 404, headers: defaultHeaders });
  47.       }
  48.     }

  49.     // 默认逻辑用于处理其他请求
  50.     const responseBody = `你好!你的 IP 是:${visitorIP},主机是:${host}`;
  51.     return new Response(responseBody, { status: 200, headers: defaultHeaders });
  52.   },
  53. };
复制代码
你可以设置默认密码,默认是空密码,因为我是放在爱快用,修改爱快的wan口网络检查域名为上面设置的set-ip.xxx.xxx,爱快默认是www.baidu.com
你也可以在openwrt上用,wan口重启处罚访问set-ip.xxx.xxx即可,
设备重启后访问get-ip.xxx.xxx,就可以知道新IP。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
这个思路不错
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-5 03:20

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表