go_ddns 自用的go语言编写的aliyun记录ipv6服务端 源码:https://gitee.com/ddt009/go_ddns.git
功能说明
get / 时显示来访IP
get /list 时显示密码提交html内容
post /list 时检查密码,密码正确列出缓存的有效值,按at时间戳从大往小排序,其中at的时间戳以东8区格式化显示;密码错误则显示来访IP
post / 时为提交数据参数有host和ipv6,保存的对象为数组,内容为host,ipv6,ipv4来访IP,at当前时间戳
初始化密码,检查密码时如果缓存里没有保存的密码,就将当前要校验的密码作为密码保存,同时进入密码验证正确的流程,密码保存在配置文件中
密码保存和校验密码使用相同的算法bcrypt
缓存类以go读写内存来实现,内容24小时后过期
只接受utf-8编码,参数host长度不超过16,ipv6不超过39
缓存以host为键名,存入前检查ip4和ip6内容和缓存的是否不同,有变化才存入,如果变化的是ipv6,调用阿里云修改域名解析
修改解析前从配置文件读取相应host的配置,没有则不更新
配置文件使用toml,保存有AccessKey ID和AccessKey Secret,对应域名,支持多个域名和多个ali帐号
编译为linux64位名为go_ddns 1 GOOS=linux GOARCH=amd64 go build -o go_ddns main.go
Dockerfile 生成并导出镜象 1 2 3 4 sudo docker build . --tag go-ddns sudo docker save go-ddns >./go-ddns.img sudo zip ./go-ddns.img.zip ./go-ddns.img sudo rm ./go-ddns.img
导入镜像 1 2 3 unzip go-ddns.img.zip sudo docker load <go-ddns.img rm go-ddns.img*
运行镜象 1 2 3 docker run --restart=always --name go-ddns -p 8080:8080 --log-opt max-size=1m -d go-ddns # 映射用法示例 docker run --restart=always --name go-ddns -p 8080:8080 -v ./config.toml:/app/config.toml --log-opt max-size=1m -d go-ddns
以下为windows上报代码示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @echo off rem windows下获取ipv6地址上报,保存为cmd文件并在计划任务里登记,注意window文件编码,错误时会识别不出中文的关键字"临时" rem 以下两个现要按需修改:YOUR-HOST-NAME和https://example.com/ SETLOCAL ENABLEDELAYEDEXPANSION set host=YOUR-HOST-NAME set firstIPv6=0 rem 中文环境里面是"临时" for /f "tokens=5 delims= " %%A in ('netsh interface ipv6 show addresses ^| findstr "临时"') do ( set firstIPv6=%%A goto sendRequest ) :sendRequest if "!firstIPv6!"=="0" ( goto end ) curl -X POST "https://example.com/" -H "Content-Type: application/json" -d "{ \"host\": \"!host!\", \"ipv6\": \"!firstIPv6!\" }" :end ENDLOCAL
Windows11下 计算机管理->系统工具->任务计划程序->创建任务(不是基本任务)
常规选项卡:填写名称(随意)/勾选不管用户是否登录都要运行/更改用户为system
触发器:新建触发器->开始任务:启动时/延迟任务时间30秒/重复间隔1小时,持续时间无限期/已启用
操作:新建->启动程序/程序或脚本(浏览到脚本文件)
设置:去除勾选”如果任务超过以下时间,停止任务”