DDNS西部数码脚本

作者:
淡白
创建时间:
2024-07-05 21:13:00
ddns shell 西部数码

摘要:这是一个用于动态更新域名解析记录的脚本,使用的是西部数码提供的DDNS API。脚本首先获取当前的IP地址,然后生成Token,构建API请求URL,并根据是否设置代理服务器而构建不同的curl命令。最后执行curl命令,将当前IP地址更新到指定的域名解析记录中。执行完毕后,输出API的响应结果。

DDNS

有个tw小鸡是是动态ip所以需要ddns我的域名是从西部数码买的。他也有提供api需要代理等级。 搞了一个小脚本

#!/bin/bash

# 获取当前IP地址函数
get_current_ip() {
  curl -s -4 ifconfig.me
}

# 对错误进行处理
handle_error() {
  local err_msg="\$1"
  echo "Error: $err_msg" >&2
  exit 1
}

# 直接在脚本中定义固定参数
USERNAME=""                  # 替换为您的西部数码用户名
API_PASSWORD=""                # 替换为您的API密码
DOMAIN=""                        # 替换为您的域名
DNS_ID=""                      # 替换为您的解析记录编号 可以从页面打开控制台 修改域名解析看到
TTL="60"                                # 生效时间值
HOST=""                               # 主机头
LEVEL="10"                              # 优先级MX记录有效
ACT="moddnsrecord"                      # 请求动作,修改域名解析
PROXY_SERVER=""  # 代理服务器地址,如果为空则不使用代理

# 获取当前IP地址
current_ip=$(get_current_ip)
[ -z "$current_ip" ] && handle_error "无法获取当前IP地址"

# 输出当前IP地址
echo "当前IP地址是: $current_ip"

# 生成时间戳(毫秒级时间戳)
TIMESTAMP=$(($(date +%s%N)/1000000))

# 生成Token
RAW_TOKEN="${USERNAME}${API_PASSWORD}${TIMESTAMP}"
TOKEN=$(echo -n "${RAW_TOKEN}" | md5sum | cut -d ' ' -f 1)

# API请求URL
API_URL="https://api.west.cn/api/v2/domain/"

# 判断是否设置代理服务器,构建curl命令
if [ -z "$PROXY_SERVER" ]; then
  CURL_CMD="curl -s -X POST $API_URL \
    -H \"Content-Type: application/x-www-form-urlencoded\" \
    -d \"username=${USERNAME}\" \
    -d \"time=${TIMESTAMP}\" \
    -d \"token=${TOKEN}\" \
    -d \"act=${ACT}\" \
    -d \"domain=${DOMAIN}\" \
    -d \"id=${DNS_ID}\" \
    -d \"value=${current_ip}\" \
    -d \"ttl=${TTL}\" \
    -d \"host=${HOST}\" \
    -d \"level=${LEVEL}\""
else
  CURL_CMD="curl -x $PROXY_SERVER -s -X POST $API_URL \
    -H \"Content-Type: application/x-www-form-urlencoded\" \
    -d \"username=${USERNAME}\" \
    -d \"time=${TIMESTAMP}\" \
    -d \"token=${TOKEN}\" \
    -d \"act=${ACT}\" \
    -d \"domain=${DOMAIN}\" \
    -d \"id=${DNS_ID}\" \
    -d \"value=${current_ip}\" \
    -d \"ttl=${TTL}\" \
    -d \"host=${HOST}\" \
    -d \"level=${LEVEL}\""
fi

# 执行curl命令并处理错误
RESPONSE=$(eval $CURL_CMD) || handle_error "API请求失败"

# 打印响应
echo "API Response: $RESPONSE"