现在IPV6加速推进,几乎限量的地址资源,但是ipv6地址比V4难记忆多了nnds(动态域名)就显得很有必要。
该网文详细介绍了dynv6.net 的注册和linux 及openwrt 下的使用方法。
但是在windows下没有介绍,而平常工作中绝大部分电脑用的是windows平台,dynv6.net 推荐的windows 平台工具我试过没有成功。
下面就介绍下在windows中怎样自动注册DDNS,本批处理文件只正对dynv6.net 网站,大家可自行修改服务于其他DDNS,我看了下基本都差不多简单就改就可以用。
这个方法借鉴与openwrt中的DDNS脚本,工具找了windows版本的,另外也可以尝试 busybox for windows 版本这样下面的工具wget、grep、sleep 只用一个执行文件就可以替代
(例如:wget 可以用 busybox.exe wget 替代;grep 可以用busybox.exe grep ;sleep 可以用 bustbox.exe sleep 替代,这样可以减少文件更加轻量级)
一、本次涉及的工具有面几种
1、 wget(从网站获取你的有效的ip地址,注:【在windows {xp 、win7、win8、win10} 默认是打开临时IPv6地址的,在适配器详细信息中有一堆IPV6地址,不熟悉的人都分不清哪个IPV6地址能够上互联网所以本机的IPV6地址不能通过索引ipconfig的方法获得,只能访问特定网址让他告诉你的IPV6地址是有效的】。另外 将本机IPV6地址推送到ddns服务商)
2、grep254(用正则表达式,捡取本机IPV6地址)
3、srvany(将脚本注测为服务用的)
4、instsrv(将脚本注测为服务用的 )
5、sleep(调整脚本调用时间)
二、主要脚本
1、dynv6.bat
改批处理文件最好是放在英文目录(目录名有空格也允许)下运行(中文的我没有测试过),该脚本需要1、2、5、三个外部文件
@echo off @set tempnum= @set ipaddr= @set oldipaddr=1.1.1.1 rem domain=你注册的域名(dynv6.net 提供多种域名后缀可自行修改) @set domain=xxx.dynv6.net rem token=你注册后的钥匙(dynv6.net 提供) @set token=xxxxxx @set IPV6_REGEX="\(\([0-9A-Fa-f]\{1,4\}:\)\{1,\}\)\(\([0-9A-Fa-f]\{1,4\}\)\{0,1\}\)\(\(:[0-9A-Fa-f]\{1,4\}\)\{1,\}\)" @set IPV4_REGEX="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" @set URL="https://dynv6.com/api/update?hostname=%domain%&token=%token%&ipv4=%%ipaddr%%" @set URLV6="https://dynv6.com/api/update?hostname=%domain%&token=%token%&ipv6=%%ipaddr%%&ipv6prefix=%%ipaddr%%" @set BIN=wget -t 2 --prefer-family=IPv6 --no-dns-cache --no-check-certificate rem ***ipv4***(dynv6也提供ipv4动态域名服务) rem for /F %%i in ('nslookup %domain% ns1.dynv6.com ^|grep254 -m2 -o %IPV4_REGEX%') do ( set oldipaddr=%%i) rem ***ipv6*** for /F %%i in ('nslookup -qt^=AAAA %domain% ns1.dynv6.com ^|grep254 -m2 -o %IPV6_REGEX%') do ( set oldipaddr=%%i) @echo Current %domain% IP Add:%oldipaddr% :start_ip1 rem @cls @echo ... @echo 1.####从ip.sb获得地址#### @set ip6addr=null REM ***ipv6*** for /F %%i in ('%BIN% -O- http://ip.sb ^|grep254 -m 1 -o %IPV6_REGEX%') do (set ipaddr=%%i) if "%ipaddr%" == "null" ( echo 没有IPV6地址或获得IPV6地址失败 sleep 5 goto start_ip2 ) else ( echo 获得IP地址:%ipaddr%,旧IP地址:%oldipaddr% if NOT "%oldipaddr%" == "%ipaddr%" ( echo ---更新IP--- goto update_web_ip ) else ( echo IP没有改变 sleep 180 goto start_ip2 )) :start_ip2 @ipconfig /flushdns @echo ... echo 2.####从checkip.dyndns.com获得地址#### @set ipaddr=null REM ***ipv4*** rem for /F %%i in ('%BIN% -O- http://checkip.dyndns.com ^|grep254 -m 1 -o %IPV4_REGEX%') do (set ipaddr=%%i) REM ***ipv6*** for /F %%i in ('%BIN% -O- http://checkipv6.dyndns.com ^|grep254 -m 1 -o %IPV6_REGEX%') do (set ipaddr=%%i) if "%ipaddr%" == "null" ( echo 没有IP地址或获得IP地址失败 sleep 5 goto start_ip1 ) else ( echo 获得IP地址:%ipaddr%,旧IP地址:%oldipaddr% if NOT "%oldipaddr%" == "%ipaddr%" ( echo ---更新IP--- goto update_web_ip ) else ( echo IP没有改变 sleep 180 goto start_ip2 )) :update_web_ip @echo ============================================== @echo ipaddr="%ipaddr%" @echo ============================================== @set var=null REM ***ipv4*** rem for /F "tokens=*" %%i in ('%BIN% -O- %URL%') do (set var=%%i) REM ***ipv6*** for /F "tokens=*" %%i in ('%BIN% -O- %URLV6%') do (set var=%%i) echo 更新信息=%var% if "%var%" == "addresses updated" goto end echo 更新失败 sleep 120 goto start_ip2 :end set oldipaddr=%ipaddr% echo 更新数据成功 sleep 300 goto start_ip2
2、install_server.bat
注意该批处理需要管理员权限(有空我会将自动获得管理员权限的脚本补全,网上也有,自行加在头部就可以了),该脚本需要3、4、两个外部文件
@echo off set curexe=%~dp0 cd /d %curexe% "%curexe%instsrv.exe" ddns_dynv6 "%curexe%srvany.exe" @echo ddns_dynv6 服务添加完成 @echo 修改服务路径 REM 添加注册表语法: reg add 注册表路径 /v 项名称 /t 值类型 /d 数据 /f 表示强行修改不提示 REM 名称 Application 值为你要作为服务运行的程序地址 /d对应的参数有斜杠不是为了转义引号,而是路径还有斜杠,默认将引号转义了,额外添加斜杠是为了保留引号 set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ddns_dynv6\Parameters\ REM 名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径 reg add %regpath% /v AppDirectory /t REG_SZ /d "%curexe%\" /f REM 名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数 reg add %regpath% /v Application /t REG_SZ /d "%curexe%dynv6.bat" /f net start ddns_dynv6 pause
3、remove_server.bat
注意该批处理需要管理员权限
@echo off net stop ddns_dynv6 instsrv ddns_dynv6 remove pause
三、使用简介
将批处理文件与上文提到的1、2、3、4、5、放在同一个目录下(目录名有空格也允许,目录名带中文的我没有测试过)。
先不要将批处理直接注册为服务,在注册dynv6.net 注册完成后将domain 与token填写正确后直接双击运行批处理,在dynv6.net上看看你的域名与ipV6地址对应上没有,如果成功注册,然后运行install_server.bat将批处理注册为服务运行。如果不需要该服务了可以运行remove_server.bat将服务移除。
四、推荐网站
原文链接:https://blog.csdn.net/jiuweiljp/article/details/117636846