go_ddns自用的go语言编写的aliyun记录ipv6服务端

go_ddns

自用的go语言编写的aliyun记录ipv6服务端
源码:https://gitee.com/ddt009/go_ddns.git

功能说明

  1. get / 时显示来访IP
  2. get /list 时显示密码提交html内容
  3. post /list 时检查密码,密码正确列出缓存的有效值,按at时间戳从大往小排序,其中at的时间戳以东8区格式化显示;密码错误则显示来访IP
  4. post / 时为提交数据参数有host和ipv6,保存的对象为数组,内容为host,ipv6,ipv4来访IP,at当前时间戳
  5. 初始化密码,检查密码时如果缓存里没有保存的密码,就将当前要校验的密码作为密码保存,同时进入密码验证正确的流程,密码保存在配置文件中
  6. 密码保存和校验密码使用相同的算法bcrypt
  7. 缓存类以go读写内存来实现,内容24小时后过期
  8. 只接受utf-8编码,参数host长度不超过16,ipv6不超过39
  9. 缓存以host为键名,存入前检查ip4和ip6内容和缓存的是否不同,有变化才存入,如果变化的是ipv6,调用阿里云修改域名解析
  10. 修改解析前从配置文件读取相应host的配置,没有则不更新
  11. 配置文件使用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
  1. Windows11下 计算机管理->系统工具->任务计划程序->创建任务(不是基本任务)
  2. 常规选项卡:填写名称(随意)/勾选不管用户是否登录都要运行/更改用户为system
  3. 触发器:新建触发器->开始任务:启动时/延迟任务时间30秒/重复间隔1小时,持续时间无限期/已启用
  4. 操作:新建->启动程序/程序或脚本(浏览到脚本文件)
  5. 设置:去除勾选”如果任务超过以下时间,停止任务”

网站或API服务状态监控(CURL定期检查)脚本

curl_check_sh

介绍

因为原免费的服务检查纷纷开始收费,而自己页面服务状态检查的需求又比较简单,所以写了这个的脚本。
功能主要为crontab定时执行,检查curl的返回是否包含/或不包含关键字,否则执行指定重置脚本(可选)并钉钉通知(可选)。
源码:https://gitee.com/ddt009/curl_check_sh

安装教程

  1. 下载curl_check.sh(建议单独目录存放)
  2. 修改脚本为可执行,执行chmod +x curl_check.sh
  3. 保证当前目录可创建._curl_check目录(用于存临时状态文件)
  4. 生成并修改配置文件,执行curl_check.sh -l,生成._curl_check/.env.sample文件,按说明修改后改名为./._curl_check/.env
  5. 安装到定时任务,直接执行curl_check.sh -i(之后可按需crontab -e修改定时任务)

使用说明

Usage: curl_check.sh [Commands] [SIGN_FILE]

Parameters:
<URL> 要检查的URL,必须!
<RESULT_REQUIRED_STR> 检测字符串,必须!
[SIGN_FILE] 状态记录的临时文件(可选)

Commands:
-h, –help 显示本帮助
-v, –version 显示版本
-d, –debug 开启调试模式
-n, –not 需要结果不包含关键字
-u, –user_agent <USER_AGENT> 指定一个user-agent
-i, –install [CONFIG_FILE] 安装本脚本到crontab中定时每5分执行(可按需修改crontab -e
-l, –load [CONFIG_FILE] 从配置文件载入参数(不存在时创建sample文件),默认载入./._curl_check/.env(该参数最好单独使用)
-e, –exec <EXECUTE_FILE> 指定报错时执行的脚本(可选)
-t, –token <DINGTALK_TOKEN> 指定报错时钉钉机器人发消息(可选)
-k, –keyword <DINGTALK_KEYWORD> 钉钉机器人keyword(可选)

Example:
curl_check.sh -l (从./._curl_check/.env载入参数,无.env则创建示例文件.env.sample
curl_check.sh -l /etc/abc.env (从/etc/abc.env载入参数或创建/etc/abc.env.sample)
curl_check.sh http://abc.com ‘“code”:0’ (访问结果需含"code:0")
curl_check.sh -n http://abc.com ‘ABC’ /var/check_abc (访问结果不能含ABC,并且临时文件指定为/var/check_abc*)

配置文件.env

#访问的URL
CURL_CHECK_URL=https://example.org

#单引号包含的目标字符串,在CURL结果中查找
CURL_CHECK_RESULT_REQUIRED_STR=’”code”:0’

#希望查找结果是否为不含指定字串[0|1](默认0)
CURL_CHECK_RESULT_WANTED_NOT=0

#USER_AGENT(可选)
CURL_CHECK_USER_AGENT=

#用于作标记失败的文件路径,为空则自动生成
CURL_CHECK_SIGN_FILE=

#失败后自动执行的脚本或程序,为空则不执行
CURL_CHECK_EXECUTE_FILE=

#失败后发送钉钉,webhook机器人token,为空则不推送
CURL_CHECK_DINGTALK_TOKEN=

#钉钉webhook机器人签名(附于信息后),机器人设置不检查就留空
CURL_CHECK_DINGTALK_KEYWORD=