windows下ipv6 ddns 动态域名自动注册批处理 dynv6(服务方式,开机自动运行无需登录)

现在IPV6加速推进,几乎限量的地址资源,但是ipv6地址比V4难记忆多了nnds(动态域名)就显得很有必要。

网文 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍 

该网文详细介绍了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将服务移除。

四、推荐网站

1、IPv6 连接测试

2、ipv6-test 能测试你的web site

3、湾湾的测试网站  也能简单测试你的web site

4、东北大学ipv6网速测试

5、http://ipv6.lab.ivi2.org

6、IP Address Lookup / IPv4 / IPv6 - IP.SB

7、Home - IPv4/IPv6 Dual Stack Test

8、http://ipv6.nop.hu/

四、工具及其他

1、科普  简单粗暴,5分钟让你了解IPv6的地址划分

2、工具见网盘 https://pan.baidu.com/s/1usXS-jERk84Z5nRyjEZgwg 提取码: 8pwf 

2021.7.7修改:请注意 ip.sb的api接口有变化,dynv6.bat 已经修改。

你可能感兴趣的:(dns,windows,脚本语言)