家用动态IP配置DDNS

2023-05-16

文章目录

  • 动态公网IP配置DDNS
    • 申请域名API访问密钥
    • 编写Java代码,定时更新域名IP
    • DDNS程序打包上传服务器,配置为开机自启动
    • 开源代码的使用说明

动态公网IP配置DDNS

家里有台老旧的笔记本电脑闲置着,功耗很低,闲着也是闲着,将它改造了一番,加了内存条、硬盘,重装了个CentOS7系统,用来跑跑docker,挂NAS还是挺不错的。以前给家里电信宽带申请了动态的公网IP,给域名配置个DDNS,让其映射到这个笔记本服务器上,就可以通过外网访问。

DDNS程序使用Java编写,项目已经开源,地址在文章末尾。

申请域名API访问密钥

以腾讯云为例,在DNSpod中创建访问token,等会写代码时要用到。需要注意的是,使用的腾讯云/阿里云的账号要具备访问域名的权限。
在这里插入图片描述

编写Java代码,定时更新域名IP

具体步骤为:
1.通过token调用接口,查询域名的IP
2.获取当前主机的最新公网IP,并判断和域名的IP是否一致
3.如果不一致,说明当前主机所在的公网IP已发生变化,通过token调用接口更新域名的IP
4.每隔3分钟执行1次上述步骤

省略1、2步骤的代码,下面只贴出修改域名IP部分的代码,项目已开源,地址在文章末尾。

public class DDNSTask {

    public static void TencentDDNSTask() {

        try {

            //3.不一致,执行修改
            Map<String,String> params2=new HashMap<String, String>();
            params2.put("domain",DOMAIN);
            params2.put("record_id",record.getString("id"));
            params2.put("record_line_id",record.getString("line_id"));
            params2.put("login_token",DNSPOD_TOKEN_ID+","+DNSPOD_TOKEN);//接口需要tokenID+token组合发送
            params2.put("value",ip);
            String resJson = HttpUtil.post("https://dnsapi.cn/Record.Ddns", null, params2, "utf-8");

            //如果请求失败,打印失败信息
            JSONObject jsonObject = JSONObject.parseObject(resJson);
            JSONObject statusRes2 = JSONObject.parseObject(jsonObject.getString("status"));
            if(!statusRes2.getString("code").equals("1")){
                LogUtil.writeErrorLog(statusRes2.getString("message"));
                return;
            }

            LogUtil.writeInfoLog("已修改为最新IP:"+ip);


        }catch (Exception e){
            LogUtil.writeErrorLog(e.getMessage());
        }
    }
}

DDNS程序打包上传服务器,配置为开机自启动

执行maven打包,将jar包上传到服务器,然后直接运行,并配置成开机自启动。
在这里插入图片描述

然后在DNSpod中查看当前域名的操作日志,可以看到,IP更新已经在定时执行了
在这里插入图片描述

开源代码的使用说明

gitee地址
整个项目只引入了json解析的依赖,HTTP请求、日志打印的工具类都是楼主自己写的。非常轻量级,项目打包后 jar 文件只有600KB,运行占用内存也只有70MB左右。
目前项目中只支持腾讯云的DDNS解析,后续会增加阿里云、华为云的解析代码。使用起来也十分方便,下载项目后只需要把配置文件中的域名和token改成自己的,就可以打包运行了。

1.项目下载到本地,找到配置文件 src / main / resources / application.properties,将token-id、token、域名改成自己的,然后就可以使用maven打包了
在这里插入图片描述

2.打包完成后在/target目录下会生成两个jar,请使用jar-with-dependencies这个jar包,将其上传到服务器运行就可以了,建议配置成开机自启动。
在这里插入图片描述

3.如果想修改定时执行周期,只需要把main方法中的线程休眠时间改一下就可以。代码非常简单。
在这里插入图片描述

贴出我这台吃灰多年的笔记本电脑
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

家用动态IP配置DDNS 的相关文章

  • STM32 使用LCD12864显示屏(串行方式)

    LCD12864 简介 12864LCD液晶显示模块是一款4位 8位并行 2线或3线接口方式 xff0c 内部含有国际一级 二级简体中文字库的图形点阵液晶模块 显示分辨率为12864 xff0c 内置8198个1616点汉字 xff0c 和
  • 快速学习C语言指针操作

    一 了解底层 指针说到底是在对数据进行操作 先了解数据的存储 xff0c 看看指针操作的位置 一位数据的存储 xff1a 将一位数据置1 xff0c 如图所示 xff0c 首先地址位需要置1 xff0c 再将数据输入位置1 xff0c 那么
  • MG90S 舵机180°角度驱动

    MG90S简介 舵机 xff1a 是一种角度伺服电机 xff0c 一般是由齿轮组 电位器 舵机控制电路 直流电机构成 由发送控制信号来控制输出轴的位置 数字舵机与模拟舵机的区别 xff1a MG90S是一款常用的数字舵机 xff0c 还有一
  • MPU6050 6轴姿态传感器的分析与使用(一)

    一 MPU6050简介 MPU6050是一个6轴姿态传感器 xff08 3轴加速度计和3轴陀螺仪传感器 xff09 xff0c 可以测量芯片自身X Y Z轴的加速度 角度参数 xff0c 通过数据融合 xff0c 可以得到姿态角 二 简介分
  • 基于51单片机的步进电机驱动,亲测无误

    文章目录 前言一 我们该如何实现电机驱动 xff1f 二 驱动实现1 硬件准备2 软件编写3 实物 总结 前言 这一次要分享的项目是最近接单做的一个小玩意儿 xff0c 基于51单片机的步进电机驱动 最近积压了两个月的小项目会在后面陆续发出
  • 对 string 类的输入(直接看总结)

    一 简述 cin get 和 cin getline 解决 char 中的问题 xff0c 遇到换行符时才停止 对于 string 类 xff0c 不能使用cin get 和cin getline 进行输入 xff0c 会报错 xff0c
  • C++中字符串的比较(针对C-风格字符串)

    一 简述 在头文件 lt cstring gt 中 xff0c 有一个函数strcmp 二 详细介绍 strcmp 比较字符串 格式为 strcmp const char Str1 const char Str2 xff0c 由此可见 xf
  • 关于文件结束符EOF

    一 简述 我们知道 xff0c C 43 43 中可以通过cin xff0c cin get xff0c cin getline xff0c getline 等对字符串进行输入 xff08 若对这些输入模糊 xff0c 可以阅读这篇文章 x
  • ubuntu 1810上snap安装nextcloud

    尝试在ubuntu1810上安装nextcloud 因为服务器配置好了xrdp远程访问 xff0c 所以直接准备在sofware center进行安装 安装了半天却提示 unable to install nextcloud snap xx
  • 关于cout 输出 char 型字符 ++ch和 ch+1 不同的结果(直接看详解)

    一 简述 今天在做练习题时注意到了之前所没有注意到的问题 xff1a 若给同样的 ch xff0c cout lt lt 43 43 ch 与 cout lt lt ch 43 1 输出后的结果不一样 浅思之后明白了 xff0c 其实这个现
  • C++定义与声明

    一 简述 什么是定义 xff1f 什么是说明 xff1f 相信很多小伙伴都对这两个概念模糊不清 xff0c 下面我就对其简单介绍一下 二 详细说明 定义 全称为定义声明 xff0c 给变量分配空间 声明 全称为引用声明 xff0c 不给变量
  • MySQL学习日记(六)用户管理、权限安全

    文章目录 用户管理和权限安全1 user权限表1 1 用户列1 2 权限列1 3 安全列1 4 资源控制列 2 其他权限表 xff08 db tables priv columns priv procs priv xff09 2 1 db表
  • Linux上的网络配置——bonding配置

    网络接口配置bonding Bonding 将多块网卡绑定同一IP地址对外提供服务 xff0c 可以实现高可用或者负载均衡 直接给两块网卡设置同一IP地址是不可以的 通过bonding xff0c 虚拟一块网卡对外提供连接 xff0c 物理
  • python--直接通过cmd找到pip所安装库的位置

    https blog csdn net weixin 44345862 article details 87003478
  • 家中闲置旧电脑改装家用NAS(入门教程)

    家中闲置旧电脑改装家用NAS xff08 纯小白入门教程 xff09 什么是NAS xff1f NAS的基本知识在国内的常用品牌 NAS品牌的配置问题作者的硬件配置 装机正文准备工作旧电脑的准备工作 xff08 已经完成或无这方面问题的可跳
  • 适用于 Linux 的 Windows 子系统 (WSL)

    适用于 Linux 的 Windows 子系统 xff08 WSL xff09 描述什么是 适用于 Linux 的 Windows 子系统 系统要求Windows 10 Windows 11 查看计算机系统的版本 虚拟化功能启用虚拟化功能禁
  • python爬取4399页面

    提示 xff1a 该段代码只可爬取4399页面的代码和图片 xff0c 适合新手爬虫入门学习 python爬取4399页面 代码总结 代码 代码如下 xff1a import urllib span class token punctuat
  • Arduino手动安装esp8266开发板

    Arduino手动安装esp8266开发板可以用离线安装包 xff0c 确定就是离线安装包网上不好找 xff0c 版本也不齐全 xff0c 无法找到某个特定版本的离线安装包 xff0c 好处是直接双击运行 xff0c 傻瓜式安装就好了 xf
  • 修改启动的进程的窗口标题

    最近在改一个项目里的小功能 原先的情况是在网页上点击按钮 xff0c ocx控件写临时 rdp文件 xff0c 根据这个文件启动mstsc exe 现在要做的工作是把远程桌面连接窗口的标题改成能显示特定信息的标题 感谢 http blog
  • Week5作业

    A题 最大矩形 题目描述 给一个直方图 xff0c 求直方图中的最大矩形的面积 例如 xff0c 下面这个图片中直方图的高度从左到右分别是2 1 4 5 1 3 3 他们的宽都是1 xff0c 其中最大的矩形是阴影部分 input 输入包含

随机推荐