Bat+JScritp解决ADSL+希网DDNS的地址更新

话说这玩意是上次给同学家里机器写DDNS IP实时更新的服务程序的时候就想做的.

结果一懒就懒了半年没动囧...

我用的是希网的动态域名,它的好处是公开客户端的协议格式可以自己写客户端.上次给同

学做的服务的原理是在后台每隔10分钟就尝试去更新一次IP.但说实话我觉得这样效率很

差.因为ADSL连接成功后到下次重拨为止IP都是固定的.在这期间根本没更新的必要.

 

----那么只要在每次拨号后更新一次就ok了.

好在我平时都是用自己写的一个bat来管理ADSL的连接/断开(这个bat很方便:P如果宽带已

断开就会拨号,如果已连接就会断开宽带).

batCode:

@Echo Off Rasdial | find "已连接" > nul If Errorlevel 1 Goto dial :HungUp Echo 当前宽带状态:已连接 Echo 正在断开... Rasdial /D Goto End :dial Echo 当前宽带状态:已断开 Rasdial 宽带连接 *********** ****** :End pause

只要在dial一节加入对更新ip的程序的调用就ok了.

接下来就是写一个更新IP的程序了,我选用了js,调试修改起来都要方便的多.

ddns.js:

var usr = "***"; var pwd = "******"; //自己拥有的域名 var domains=new Array( "chrisak.3322.org" ); var http= new ActiveXObject("MSXML2.XMLHTTP"); function print (msg) { WScript.Echo (msg); } function write (msg) { WScript.StdOut.Write(msg); } //生成URL function createUpdateUrl (domain) { return "http://" + usr + ":" + pwd + "@members.3322.org/dyndns/update?system=dyndns&hostname=" + domain + "&wildcard=OFF&backmx=NO&offline=NO"; } //发送请求返回结果 function readUrl (url) { http.Open ("GET",url,false); http.Send(); return http.ResponseText; } function updateDns (domain) { print ("正在更新域名" + domain); var url = createUpdateUrl(domain); var svrret = readUrl(url); var ipstart = svrret.indexOf (' '); var retcode = svrret.substr (0,ipstart); //判断更新的结果 if (retcode=="good" || retcode=="nochg"){ print ("IP已更新至 " + svrret.substr (++ipstart)); } else { print ("域名IP更新失败:("); } } for (var i in domains) { updateDns(domains[i]); } write("所有域名更新完成");

接下来修改bat:

@Echo Off Rasdial | find "已连接" > nul If Errorlevel 1 Goto dial :HungUp Echo 当前宽带状态:已连接 Echo 正在断开... Rasdial /D Goto End :dial Echo 当前宽带状态:已断开 Rasdial 宽带连接 ************* ****** cscript ddns.js :End pause

 

这样每次一旦我用这个bat拨号完成后,就会自动为我更新我的ip,再也不用随时跑一个客户端了:)

Bat+JScritp解决ADSL+希网DDNS的地址更新_第1张图片

你可能感兴趣的:(function,url,domain,wildcard)