<% '============================================================================================================== 'WinMyDNS动态解析服务端API接口 (V1.0) '输入参数: ' username 用户名 ' domain 可以为空,表示其用户名下的所有域名,多个域名以","号分隔的域名 ' ttl 域名刷新时间 ' netid 网络组编号 ' ip IP地址,为空表示系统自动取客户的IP地址 ' otime 操作时间 ' chksum 验证码 chksum=md5(username+domain+ttl+netid+otime+md5(password)) ' password 会员密码,如果传送明文的password,就不校验chksum ' hostname 需要更新的主机名,如:www.abc.com ' '输出: ' ocode:0=成功,-1=失败 ' omesg:提示说明 ' ip:域名指向的IP ' '例如:http://localhost/regapi.asp?username=admin&password=123456&hostname=www.winmydns.com&ip=192.168.1.112 '============================================================================================================== Function BackMess(OCode,OMesg) Response.Write "ocode="&OCode&vbCrLf Response.write "omesg="&OMesg&vbCrLf Response.write "ip="&IP&vbCrLf Response.End End Function UserName = SafeRequest("username") Password = SafeRequest("password") Domain = SafeRequest("domain") TTL = SafeRequest("ttl") Ip = SafeRequest("Ip") if Ip="" then Ip = Request.ServerVariables("REMOTE_ADDR") hostname = SafeRequest("hostname") If TTL="" or Not IsNumeric(TTL) Then TTL=120 netid = SafeRequest("netid") otime = SafeRequest("otime") chksum = SafeRequest("chksum") '============================================================================================== '用户名,密码判断 '============================================================================================== 'If UserName="" or Password="" or Domain="" Then Call BackMess(-1,"Information missing") If UserName="" Then Call BackMess(-1,"username missing") If chksum="" and Password="" Then Call BackMess(-1,"chksum missing") Sql = "Select username,password from [UserList] where username='"&UserName&"' " Set Rs = Conn.Execute(sql) If Rs.Eof Then Call BackMess(-1,"username wrong") Password_db = Rs("password") if Password<>"" then Password_md5 = lcase(md5(Password)) if lcase(Password_db) <> Password_md5 then Call BackMess(-1,"password wrong" ) else chksum_db = lcase(md5(username & domain & ttl & netid & otime & lcase(Password_db))) If lcase(chksum)<>chksum_db Then Call BackMess(-1,"chksum wrong" ) end if Ruser=Rs("username") Set Rs=Nothing '====================== '用户权限判断 '====================== if hostname<>"" then '通过hostname更新记录 call updatebyhostname() response.end end if Sql = "Select id,origin from [SOA] where username='"&Ruser&"'" Set Rs = Conn.Execute(sql) OKdns="" Do While Not Rs.Eof if netid="" then Sql="Select * from [RR] where zone="&Rs("id")&" and type='A' " else Sql="Select * from [RR] where zone="&Rs("id")&" and type='A' and netid='"&netid&"' " end if Set SRs=Server.createobject("ADODB.RecordSet") SRs.open Sql,conn,1,3 If Not SRs.Eof Then '存在对应的DNS记录=>更新相关A记录 Do While Not SRs.Eof SRs("data")=Ip SRs("ttl")=TTL SRs.Update SRs.MoveNext Loop Else '不存在=>添加一条A记录泛解析 if netid="" then Conn.Execute("Insert Into [RR] (zone,name,type,data,aux,ttl,netid) VALUES ("&Rs("id")&",'*','A','"&IP&"',10,"&TTL&",'0')") else Conn.Execute("Insert Into [RR] (zone,name,type,data,aux,ttl,netid) VALUES ("&Rs("id")&",'*','A','"&IP&"',10,"&TTL&",'"&netid&"')") end if End If Set SRs=Nothing Sql="Update [SOA] Set serial=serial+1 where username='"&Ruser&"'" Conn.Execute(sql) OKdns=OKdns&str&" " Rs.MoveNext Loop rs.close If OKdns="" Then Call BackMess(-1,"Null domain done") Call BackMess(0,OKdns&"operation ok") function updatebyhostname() sql = " select b.id as rrid,a.id as zoneid from soa a left join rr b on a.id=b.zone " sql = sql & " where ((b.name+'.'+a.origin)='"&hostname&"' or (b.name+'.'+a.origin)='"&hostname&".' " sql = sql & " or (a.origin ='"&hostname&"' and b.name='') " sql = sql & " or (a.origin ='"&hostname&".' and b.name='') ) " sql = sql & " and (a.username ='"&UserName&"') " rrid="" set rst = conn.execute(sql) do while not rst.eof sql = "update rr set data='"&ip&"' where id='"&rst("rrid")&"' " sql = sql & " update soa set serial=(serial+1) where id='"&rst("zoneid")&"' " responsea.write sqla conn.execute(sql) OKdns = OKdns&hostname&" " rst.movenext loop rst.close If OKdns="" Then Call BackMess(-1,"Null hostname done") Call BackMess(0,OKdns&"operation ok") end function %>