搞机 linux

花生壳DDNS更新shell脚本

Posted on 2024-05-22,3 min read
封面图

前天给京东云路由器刷了这个DWRT,开启了clash,然后DDNS插件获取的ip就变成了代理ip,导致无法正常外网访问我局域网中部署的服务,DDNS插件设置从wan口获取ip一直无法保存,也不知道是插件的BUG还是固件的BUG,没实力排错,只能换个法子实现😅
具体实现办法:在不走代理的服务器上定时运行shell来更新DDNS,并且为了贯彻“能用鼠标点就不要敲键盘”的思想,定时用1panel面板的定时任务实现

以下代码来自chatgpt

#!/bin/bash

# 假设你已经为以下变量赋了值
USERNAME="your_username"
PASSWORD="your_password"
YOURHOSTNAME="your_hostname"

# 获取当前公网IP地址
WANIP=$(curl -m 5 -sS -X GET http://checkip.dyndns.com | grep -oP 'Current IP Address: \d+\.\d+\.\d+\.\d+' | cut -d ' ' -f 4)

# 检查WANIP变量是否成功获取到IP地址
if [ -z "$WANIP" ]; then
    echo "Error: Unable to retrieve WAN IP address."
    exit 1
fi

# 构建请求的URL
URL="http://${USERNAME}:${PASSWORD}@ddns.oray.com/ph/update?hostname=${YOURHOSTNAME}&myip=${WANIP}"

# 使用curl发送请求到DDNS提供商,并分别获取HTTP状态码和响应内容
HTTP_STATUS=$(curl -sS -o /dev/stdout -w "%{http_code}" -u "${USERNAME}:${PASSWORD}" "${URL}")
RESPONSE=$(curl -sS -u "${USERNAME}:${PASSWORD}" "${URL}")

# 输出HTTP状态码和响应内容
echo "HTTP Response Code: $HTTP_STATUS"
echo "Response: $RESPONSE"

# 从RESPONSE中分离状态码和IP地址
RESPONSE_STATUS=$(echo "$RESPONSE" | awk '{print $1}')
IP_ADDRESS=$(echo "$RESPONSE" | awk '{print $2}')
HTTP_RESPONSE_IP=$(echo "$RESPONSE" | awk -F'[^0-9]*$' '{print $1}')

# 输出分离后的状态码和IP地址
echo "Response Status: $RESPONSE_STATUS"
echo "IP Address: $IP_ADDRESS"

# 根据返回的响应状态判断操作结果
case "$RESPONSE_STATUS" in
    "good")
        echo "DDNS update successful. Your IP has been updated to: $IP_ADDRESS"
        ;;
    "nochg")
        echo "DDNS update successful, but no IP change."
        ;;
    # 处理其他响应状态...
    *)
        echo "Unexpected response: $RESPONSE_STATUS"
        ;;
esac

下一篇: 在机顶盒上部署一套k3s集群→

loading...