获取 TP-Link 路由器 WAN 口 IPv6,DDNS 更新至阿里云域名解析
DDNS_IPv6.sh
#!/bin/bash
ROUTER_IP="192.168.1.1"
PASSWORD="qKL8r6vPPxxxxxx"
LOGIN_PAYLOAD="{\"method\":\"do\",\"login\":{\"password\":\"$PASSWORD\"}}"
# 获取 stok
RESPONSE=$(curl -s -X POST http://$ROUTER_IP/ \
-H "Accept: application/json, text/javascript, */*; q=0.01" \
-H "Accept-Encoding: gzip, deflate" \
-H "Accept-Language: zh-CN,zh;q=0.9" \
-H "Cache-Control: no-cache" \
-H "Connection: keep-alive" \
-H "Content-Type: application/json; charset=UTF-8" \
-H "Origin: http://$ROUTER_IP" \
-H "Pragma: no-cache" \
-H "Referer: http://$ROUTER_IP/" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" \
-H "X-Requested-With: XMLHttpRequest" \
--data "$LOGIN_PAYLOAD")
# 提取 stok
STOK=$(echo $RESPONSE | grep -oP '(?<="stok":")[^"]+')
# 检查是否成功获取 stok
if [ -z "$STOK" ]; then
echo "Failed to get stok."
exit 1
fi
#echo "Successfully obtained stok: $STOK"
# 创建 JSON payload 文件
cat <<EOF > payload.json
{
"protocol": {"name": ["wanv6", "pppoev6", "wan"]},
"firewall": {"name": ["ipv6_firewall"]},
"network": {"name": ["wan_status", "wanv6_status", "iface_mac", "lan"]},
"online_check": {"name": "wanv6"},
"method": "get"
}
EOF
# 使用获取到的 stok 进行后续请求
URL="http://$ROUTER_IP/stok=$STOK/ds"
RESPONSE=$(curl -s -X POST $URL \
-H "Accept: application/json, text/javascript, */*; q=0.01" \
-H "Accept-Encoding: gzip, deflate" \
-H "Accept-Language: zh-CN,zh;q=0.9" \
-H "Cache-Control: no-cache" \
-H "Connection: keep-alive" \
-H "Content-Type: application/json; charset=UTF-8" \
-H "Origin: http://$ROUTER_IP" \
-H "Pragma: no-cache" \
-H "Referer: http://$ROUTER_IP/" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" \
-H "X-Requested-With: XMLHttpRequest" \
--data @payload.json)
# 提取 ip6addr 字段的信息
IP6ADDR=$(echo $RESPONSE | jq -r '.network.wanv6_status.ip6addr')
# echo "The ip6addr is: $IP6ADDR"
if [ ! -e /root/IPv6.txt ]; then
touch /root/IPv6.txt
fi
IP6ADDR_OLD=$(cat /root/IPv6.txt)
# echo $IP6ADDR_OLD
# 使用 aliyun alidns 命令更新域名 IPv6 记录
# 获取 RecordId: aliyun alidns DescribeDomainRecords --DomainName 你的域名.com
if [ "$IP6ADDR" != "$IP6ADDR_OLD" ];then
/usr/local/bin/aliyun alidns UpdateDomainRecord --RecordId 905668450158xxxxxx --RR wills-home --Type AAAA --Value $IP6ADDR --Line default &>> /tmp/aliyunDDNSIPv6.logs
echo >> /tmp/aliyunDDNSIPv6.logs
echo -n "$IP6ADDR" > /root/IPv6.txt
fiDockerfile
构建镜像
启动容器
Last updated