找回密码
 立即注册
img_loading
智能检测中

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 6995|回复: 39

dynv6免费二级域名自动更新IPv6地址的脚本

[复制链接]
发表于 2023-3-21 20:40 | 显示全部楼层 |阅读模式
本帖最后由 aming.ou 于 2023-4-24 17:52 编辑

官方说明 https://dynv6.com/docs/apis

以下是我改进过的shell脚本,配置信息写入脚本
保存为dynv6.sh , 修改属于自己的www.dynv6.com上注册的二级域名,修改为自己的token,修改wget程序的路径,其他不变。
上传到/sbin/dynv6.sh ,修改文件权限 chmod 777 /sbin/dynv6.sh
crontab -e进入定时任务管理, 添加一条,每10分钟检查一次,发现IPv6地址变化后才更新
*/10 * * * * /sbin/dynv6.sh
------------------------------------------------------------
#!/bin/sh -e
source /etc/profile


hostname='ddns.dynv6.net'
token='jZsUe3pHmMvLsjdfdfdqc7JTXsxneR'
file=/tmp/.dynv6.addr6
fileerr=/tmp/.dynv6.addr6.log

[ -e $file ] && old=`cat $file`

if [ -z "$netmask" ]; then
  netmask=64
fi

unset $address
for ipline in `ip -6 addr list scope global | grep $netmask | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p'`; do
    unset $j
    j=`echo $ipline |grep -o "\:" |wc -l`
    if [ "$j" = "7" ];then
        echo $ipline, $j
        address=$ipline
    fi
done

if [ -e /usr/bin/wget ]; then
  bin="wget -q -O-"
else
  echo "neither curl nor wget found"
  exit 1
fi

if [ -z "$address" ]; then
  echo "$(date '+%Y-%m-%d %H:%M:%S') : no IPv6 address found"
  echo "$(date '+%Y-%m-%d %H:%M:%S') : no IPv6 address found" >> $fileerr
  exit 1
fi

unset $tmpstr
for ipline in `$bin http://ip.zxinc.org/getip`; do
  tmpstr=$ipline
  echo "Local address= $tmpstr"
done
if [ -z "$tmpstr" ]; then
  echo "$(date '+%Y-%m-%d %H:%M:%S') : The net is dead."
  echo "$(date '+%Y-%m-%d %H:%M:%S') : The net is dead." >> $fileerr
  exit 1
fi

# address with netmask
current=$address/$netmask
tmpstr=`ping -6 -c 1 ${hostname} | sed '1{s/[^(]*(//;s/).*//;q}'`
echo "oldIPv6= $tmpstr"
if [ "$old" = "$current" ] && [ "$tmpstr" = "$address" ]; then
  echo "IPv6 address unchanged: $current"
  echo "$(date '+%Y-%m-%d %H:%M:%S') : $current" >> $fileerr
  exit
fi
echo "$(date '+%Y-%m-%d %H:%M:%S') : $old -> $current" >> $fileerr

# send addresses to dynv6
$bin "http://dynv6.com/api/update?hostname=$hostname&ipv6=$current&token=$token"

# save current address
echo $current > $file



------------------------------------------------------------
windows的bat脚本和Linux的shell脚本

Shell更新230424


------------------------------------------------------------2023-04-24更新
IPv6地址分配规则,DHCPv6由服务器分配,是短地址格式,如果是SLAAC分配就是长地址格式,原检测代码是基于长地址编写,为了兼容2种方式,代码修改如下

#----------------Begin

#!/bin/sh -e
source /etc/profile

hostname='ddns.dynv6.net'
token='jZsUe3pHmMvLsjdfdfdqc7JTXsxneR'
file=/tmp/.dynv6.addr6
fileerr=/tmp/.dynv6.addr6.log

[ -e $file ] && old=`cat $file`

if [ -z "$hostname" -o -z "$token" ]; then
    echo "Usage: token=<your-authentication-token> [netmask=64] $0 your-name.dynv6.net [device]"
    exit 1
fi

unset $address
unset $add2ress
for ipline in `ip -6 addr list scope global | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p'`; do
    j=`echo $ipline |grep -o "\:" |wc -l`
    echo "$ipline , $j"
    if [ "$j" = "7" ];then
        address=$ipline
    else
        if [ "${ipline:0:1}" = "2" ];then
            add2ress=$ipline
        fi
    fi
done

if [ -e /usr/bin/wget ]; then
    bin="wget -q -O-"
else
    echo " wget not found"
    exit 1
fi

if [ -z "$address" ] && [ -z "$add2ress" ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') : no IPv6 address found"
    echo "$(date '+%Y-%m-%d %H:%M:%S') : no IPv6 address found" >> $fileerr
    exit 1
elif [ -z "$address" ];then
    address=$add2ress
fi
echo "IfIPv6=  $address"

unset $tmpstr
for ipline in `$bin http://ip.zxinc.org/getip`; do
    tmpstr=$ipline
    echo "Local address= $tmpstr"
done
if [ -z "$tmpstr" ]; then               
    echo "$(date '+%Y-%m-%d %H:%M:%S') : The net is dead."
    echo "$(date '+%Y-%m-%d %H:%M:%S') : The net is dead." >> $fileerr
    exit 1                                                                 
fi

echo "host= $hostname"
if [ $old ]; then                                                
    echo "oldIPv6= $old"                                                                 
fi

# address with netmask
current=$address/$netmask
tmpstr=`ping -6 -c 1 ${hostname} | sed '1{s/[^(]*(//;s/).*//;q}'`
echo "dnsIPv6= $tmpstr"
if [ "$old" = "$current" ] && [ "$tmpstr" = "$address" ]; then
    echo "IPv6 address unchanged: $current"
    echo "$(date '+%Y-%m-%d %H:%M:%S') : $current" >> $fileerr
    exit
elif [ "$old" != "$current" ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') : local= $old -> $current" >> $fileerr
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') : dnsIP= $tmpstr -> $current" >> $fileerr
fi
# send addresses to dynv6
$bin "http://dynv6.com/api/update?hostname=$hostname&ipv6=$current&token=$token"
echo .
# save current address
echo $current > $file


#----------------End



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1恩山币 +2 收起 理由
龙飞凤舞 + 2 你好,久仰卧龙大名,在下凤雏!

查看全部评分

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2023-3-22 14:42 | 显示全部楼层
感谢,正好需要这个
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 17:17 | 显示全部楼层
根据坛友反馈,以下这行代码可能因为接口不一样而无法获取IPv6地址,建议先打印 ip -6 addr list scope global 看看返回什么信息,再进行个性化修改
for ipline in `ip -6 addr list scope global | grep $netmask | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p'`; do

例如修改为:
for ipline in `ip -6 addr list scope global #接口名字# | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p'`; do
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-23 17:50 | 显示全部楼层
嘿嘿,这个可以有!!...
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-23 18:19 来自手机 | 显示全部楼层
账号申请需要用邮箱认证,人机鉴别时需要用魔法上网
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-23 19:45 来自手机 | 显示全部楼层
我前几天写了个在线一键脚本安装和自动配置,只要在计划任务中替换成域名和令牌就行了,适配了老毛子固件和OpenWrt固件!

点评

在线安装,是不是要搭建服务器?还是用官方的脚本地址?  详情 回复 发表于 2023-3-27 23:24
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-23 22:24 | 显示全部楼层
看看脚本怎么样
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-24 11:14 | 显示全部楼层
感谢楼主分享
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-24 11:28 | 显示全部楼层

嘿嘿,这个可以有!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-24 22:56 来自手机 | 显示全部楼层
含着分析
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-25 03:35 | 显示全部楼层
fdfffffffffffd
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-26 11:44 来自手机 | 显示全部楼层
看看有没有
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-27 23:24 来自手机 | 显示全部楼层
liaohcai 发表于 2023-3-23 19:45
我前几天写了个在线一键脚本安装和自动配置,只要在计划任务中替换成域名和令牌就行了,适配了老毛子固件和 ...

在线安装,是不是要搭建服务器?还是用官方的脚本地址?

点评

只是搭建一个储存脚本的文件服务器,这样就能省去很多步骤,更方便小白,是根据官方网站的API,自己编写的shell脚本,一键安装到路由器里,并自动配置到计划任务,最后在计划任务将里面的信息替换成自己的,保存!  详情 回复 发表于 2023-3-28 01:55
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-28 01:55 来自手机 | 显示全部楼层
aming.ou 发表于 2023-3-27 23:24
在线安装,是不是要搭建服务器?还是用官方的脚本地址?

只是搭建一个储存脚本的文件服务器,这样就能省去很多步骤,更方便小白,是根据官方网站的API,自己编写的shell脚本,一键安装到路由器里,并自动配置到计划任务,最后在计划任务将里面的信息替换成自己的,保存!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-3-28 02:08 来自手机 | 显示全部楼层
https://www.right.com.cn/forum/thread-8278421-1-1.html

点评

谢谢,学习了,很强大的ddns脚本  详情 回复 发表于 2023-3-28 08:04
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛

只谈技术、莫论政事!切勿转播谣言!为了你也为了他人。
只谈技术、莫论政事!(点击见详情) 切记不要随意传播谣言,把自己的日子过安稳了就行,为了自己好也为了大家好。 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。

查看 »

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-6-7 21:23

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表