加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

动态IP更新到dnspod的域名解析上还可以顺便发封邮件通知下

发布时间:2020-12-17 08:00:58 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 On Error Resume Next'========各种自定义设置开始========getcipurl1 = "http://****1****"'http://你自己找的获取公网IP的网址,如http://whois.263

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

On Error Resume Next

'========各种自定义设置开始========
getcipurl1 = "http://****1****"		'http://你自己找的获取公网IP的网址,如http://whois.263.tw/cip.php
getcipurl2 = "http://****2****"		'http://你自己找的获取公网IP的网址,如http://www.7xm.net/cip.php
getcipurl3 = "http://****3****"		'http://你自己找的获取公网IP的网址,如...
dnspodU = "[email?protected]"			'你的dnspod的用户名(一般是邮箱地址)
dnspodP = "*********"			'你的dnspod的密码
dnspodDomainID = "********"		'你已登记在dnspod里的域名的ID号(别问我域名id怎么获取,https://support.dnspod.cn/Support/api 有你想要的)
dnspodRecordID = "********"		'你已登记在dnspod里的域名里你已增加好等着更新的解析记录的ID号,如“www”要查www的ID是多少,还是看上面api说明吧。
dnspodSub_domain = "www"		'你已登记在dnspod里的域名里你已增加好等着更新的解析记录名称

isOpenSendmail = 1			'是否开启发送邮件通知(1开启,0关闭)
sendmailSMTP = "smtp.163.com"		'开启发送邮件通知后需要设置发件服务器SMTP服务器地址
sendmailFrom = "[email?protected]"		'发件服务器的用户名
sendmailFromName = "IP更换通知"		'发件服务器的用户名名称
sendmailFromPSW = "********"		'发件服务器的密码
sendmailTO = "[email?protected]"		'接收邮件通知的邮箱地址
sendmailSubject = "家里IP又变了哦!"	'邮件通知的邮件主题
'========各种自定义设置结束========

Do While True

'-----------定义公网IP开始-----------
GetWanIP = GetURL(getcipurl1)
if CheckIp(GetWanIP) = 0 Then
	GetWanIP = GetURL(getcipurl2)
	Call LogToFile("第一次获取公网IP失败,2服务器获取IP为:"&GetWanIP,1)
	if CheckIp(GetWanIP) = 0 Then
		GetWanIP = GetURL(getcipurl3)
		Call LogToFile("第二次获取公网IP失败,3服务器获取IP为:"&GetWanIP,1)
	End if
End if
'-----------定义公网IP结束-----------

'-----------查询解析IP开始-----------
PostURL = "https://dnsapi.cn/Record.Info"
Params = "login_email="&dnspodU&"&login_password="&dnspodP&"&format=json&domain_id="&dnspodDomainID&"&record_id="&dnspodRecordID
strTest = PostHTTP(PostURL,Params)
Set json = New VbsJson
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set o = json.Decode(strTest)
DnsIP = o("record")("value")
'MsgBox CheckIp(DnsIP)
if CheckIp(DnsIP) = 1 Then
	DnsIP = o("record")("value")
Else
	DnsIP = "127.0.0.1"
End if
'-----------查询解析IP结束-----------

if GetWanIP <> DnsIP Then
'-----------执行修改dnspod解析记录开始-----------
PostURL = "https://dnsapi.cn/Record.Modify"
Params = "login_email="&dnspodU&"&login_password="&dnspodP&"&format=json&domain_id="&dnspodDomainID&"&record_id="&dnspodRecordID&"&sub_domain="&dnspodSub_domain&"&value="&GetWanIP&"&record_type=A&record_line=默认"
Call PostHTTP(PostURL,Params)
Call LogToFile("解析DNS登记IP:"&DnsIP&" 更新公网IP:"&GetWanIP&" 客户端内网IP:"&GetLanIP,0)
if isOpenSendmail = 1 Then
	Call Send_Email(sendmailSMTP,sendmailFrom,sendmailFromPSW,sendmailTO,sendmailFromName,sendmailSubject,"解析DNS登记IP:"&DnsIP&" 更新公网IP:"&GetWanIP&" 客户端内网IP:"&GetLanIP)
End if
'-----------执行修改dnspod解析记录结束-----------
End if

WScript.Sleep 3600000
Loop


'==============以下为自定义函数==============

'-----------POST获取远程页面函数开始-----------
Function PostHTTP(PostURL,Params)
	Dim oauth_http
	Set oauth_http=CreateObject("MSXML2.ServerXMLHTTP")
	oauth_http.Open "POST",posturl,False,"",""
	oauth_http.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
	oauth_http.SetRequestHeader "User-Agent","DNSPod API VBS Update My Client IP v0.1([email?protected])"
	oauth_http.Send(Params)
	If oauth_http.Status = "200" Then
		PostHTTP = oauth_http.responseText
	Else
		PostHTTP = http.Status & "<br />" & oauth_http.responseText
	End If
	Set oauth_http=nothing 
End Function
'-----------POST获取远程页面函数结束-----------


'-----------校验IP函数开始-----------
Function CheckIp(paR_strIp) 
	CheckIp =0 
	Dim tmpLoop,tmpStr 
	tmpStr =paR_strIp 
	If tmpStr ="" Or IsNull(tmpStr) Then Exit Function 
		tmpStr =Split(tmpStr,".") 
	If Not isArray(tmpStr) Then Exit Function 

	For tmpLoop =0 To ubound(tmpStr) 
		If tmpStr(tmpLoop) ="" Or IsNull(tmpStr(tmpLoop)) Then Exit Function 
		If Not isNumeric(tmpStr(tmpLoop)) Then Exit Function 
		If Cint(tmpStr(tmpLoop)) >255 Or Cint(tmpStr(tmpLoop)) <1 Then Exit Function 
	Next 
	CheckIp =1 
End Function
'-----------校验IP函数结束-----------

'-----------写日志函数开始-----------
Function LogToFile(strContent,strFlag)
	Const ForReading = 1,ForWriting = 2,ForAppending = 8
	Dim fso,f
	Set fso = CreateObject("Scripting.FileSystemObject")
	If strFlag = 0 Then
		Set f = fso.OpenTextFile("updateCIP_log_"& Date & ".txt",ForAppending,True)
	Else
		Set f = fso.OpenTextFile("updateCIP_errLog_"& Date & ".txt",True)
	End If
	f.WriteLine Date() & " " & Time & " " & strContent
End Function
'-----------写日志函数结束-----------

'-----------获取内网IP函数开始-----------
Public Function GetLanIP'获取内网IP
	ComputerName="."
	Dim objWMIService,colItems,objItem,objAddress
	Set objWMIService = GetObject("winmgmts:" & ComputerName & "rootcimv2")
	Set colItems = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
	For Each objItem in colItems
		For Each objAddress in objItem.IPAddress
			If objAddress <> "" then
				GetLanIP = objAddress
				Exit Function
			End If
		Next
	Next
End Function
'-----------获取内网IP函数结束-----------

'-----------获取远程页面函数开始-----------
Function GetURL(url)'获取远程地址内容
	Set Retrieval = CreateObject("Msxml2.ServerXMLHTTP") 
	With Retrieval
		.Open "GET",url,False
		.Send 
		GetURL = bytes2bstr(.responsebody)
		if len(.responsebody)<2 then
			strContent = "远程通讯故障!"
			Call LogToFile(strContent,1)
		response.end
		end if
	End With 
	Set Retrieval = Nothing 
End Function
'-----------获取远程页面函数结束-----------

'-----------字符编码转换函数开始-----------
function bytes2bstr(vin) 
	strreturn = ""
	for i = 1 to lenb(vin) 
		thischarcode = ascb(midb(vin,i,1)) 
		if thischarcode < &h80 then 
			strreturn = strreturn & chr(thischarcode) 
		else 
			nextcharcode = ascb(midb(vin,i+1,1)) 
			strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode)) 
			i = i + 1 
		end if 
	next 
	bytes2bstr = strreturn
end function
'-----------字符编码转换函数开始-----------

'-----------发邮件函数开始-----------
Function Send_Email(smtpHost,smtpUser,smtpPass,mailTo,FromName,subject,content)
	Set jmail = CreateObject("JMAIL.Message")
	jmail.silent = true
	jmail.logging = true
	jmail.Charset = "gb2312"
	jmail.ContentType = "text/html"
	jmail.AddRecipient mailTo
	jmail.From = smtpUser
	jmail.FromName = FromName
	jmail.Subject = subject
	jmail.Body = content
	jmail.Priority = 1
	jmail.MailServerUserName = smtpUser
	jmail.MailServerPassword = smtpPass
	jmail.Send(smtpHost)
	jmail.Close()
	'WScript.Echo("邮件发送成功")
End Function
'-----------发邮件函数结束-----------

'-----------解析json开始-----------
Class VbsJson
    'Author: Demon
    'Date: 2012/5/3
    'Website: http://demon.tw
    Private Whitespace,NumberRegex,StringChunk
    Private b,f,r,n,t

    Private Sub Class_Initialize
        Whitespace = " " & vbTab & vbCr & vbLf
        b = ChrW(8)
        f = vbFormFeed
        r = vbCr
        n = vbLf
        t = vbTab

        Set NumberRegex = New RegExp
        NumberRegex.Pattern = "(-?(?:0|[1-9]d*))(.d+)?([eE][-+]?d+)?"
        NumberRegex.Global = False
        NumberRegex.MultiLine = True
        NumberRegex.IgnoreCase = True

        Set StringChunk = New RegExp
        StringChunk.Pattern = "([sS]*?)([""x00-x1f])"
        StringChunk.Global = False
        StringChunk.MultiLine = True
        StringChunk.IgnoreCase = True
    End Sub
    
    'Return a JSON string representation of a VBScript data structure
    'Supports the following objects and types
    '+-------------------+---------------+
    '| VBScript          | JSON          |
    '+===================+===============+
    '| Dictionary        | object        |
    '+-------------------+---------------+
    '| Array             | array         |
    '+-------------------+---------------+
    '| String            | string        |
    '+-------------------+---------------+
    '| Number            | number        |
    '+-------------------+---------------+
    '| True              | true          |
    '+-------------------+---------------+
    '| False             | false         |
    '+-------------------+---------------+
    '| Null              | null          |
    '+-------------------+---------------+
    Public Function Encode(ByRef obj)
        Dim buf,c,g
        Set buf = CreateObject("Scripting.Dictionary")
        Select Case VarType(obj)
            Case vbNull
                buf.Add buf.Count,"null"
            Case vbBoolean
                If obj Then
                    buf.Add buf.Count,"true"
                Else
                    buf.Add buf.Count,"false"
                End If
            Case vbInteger,vbLong,vbSingle,vbDouble
                buf.Add buf.Count,obj
            Case vbString
                buf.Add buf.Count,""""
                For i = 1 To Len(obj)
                    c = Mid(obj,1)
                    Select Case c
                        Case """" buf.Add buf.Count,""""
                        Case ""  buf.Add buf.Count,""
                        Case "/"  buf.Add buf.Count,"/"
                        Case b    buf.Add buf.Count,"b"
                        Case f    buf.Add buf.Count,"f"
                        Case r    buf.Add buf.Count,"r"
                        Case n    buf.Add buf.Count,"n"
                        Case t    buf.Add buf.Count,"t"
                        Case Else
                            If AscW(c) >= 0 And AscW(c) <= 31 Then
                                c = Right("0" & Hex(AscW(c)),2)
                                buf.Add buf.Count,"u00" & c
                            Else
                                buf.Add buf.Count,c
                            End If
                    End Select
                Next
                buf.Add buf.Count,""""
            Case vbArray + vbVariant
                g = True
                buf.Add buf.Count,"["
                For Each i In obj
                    If g Then g = False Else buf.Add buf.Count,","
                    buf.Add buf.Count,Encode(i)
                Next
                buf.Add buf.Count,"]"
            Case vbObject
                If TypeName(obj) = "Dictionary" Then
                    g = True
                    buf.Add buf.Count,"{"
                    For Each i In obj
                        If g Then g = False Else buf.Add buf.Count,"
                        buf.Add buf.Count,"""" & i & """" & ":" & Encode(obj(i))
                    Next
                    buf.Add buf.Count,"}"
                Else
                    Err.Raise 8732,"None dictionary object"
                End If
            Case Else
                buf.Add buf.Count,"""" & CStr(obj) & """"
        End Select
        Encode = Join(buf.Items,"")
    End Function

    'Return the VBScript representation of ``str(``
    'Performs the following translations in decoding
    '+---------------+-------------------+
    '| JSON          | VBScript          |
    '+===============+===================+
    '| object        | Dictionary        |
    '+---------------+-------------------+
    '| array         | Array             |
    '+---------------+-------------------+
    '| string        | String            |
    '+---------------+-------------------+
    '| number        | Double            |
    '+---------------+-------------------+
    '| true          | True              |
    '+---------------+-------------------+
    '| false         | False             |
    '+---------------+-------------------+
    '| null          | Null              |
    '+---------------+-------------------+
    Public Function Decode(ByRef str)
        Dim idx
        idx = SkipWhitespace(str,1)

        If Mid(str,idx,1) = "{" Then
            Set Decode = ScanOnce(str,1)
        Else
            Decode = ScanOnce(str,1)
        End If
    End Function
    
    Private Function ScanOnce(ByRef str,ByRef idx)
        Dim c,ms

        idx = SkipWhitespace(str,idx)
        c = Mid(str,1)

        If c = "{" Then
            idx = idx + 1
            Set ScanOnce = ParSEObject(str,idx)
            Exit Function
        ElseIf c = "[" Then
            idx = idx + 1
            ScanOnce = ParseArray(str,idx)
            Exit Function
        ElseIf c = """" Then
            idx = idx + 1
            ScanOnce = ParseString(str,idx)
            Exit Function
        ElseIf c = "n" And StrComp("null",Mid(str,4)) = 0 Then
            idx = idx + 4
            ScanOnce = Null
            Exit Function
        ElseIf c = "t" And StrComp("true",4)) = 0 Then
            idx = idx + 4
            ScanOnce = True
            Exit Function
        ElseIf c = "f" And StrComp("false",5)) = 0 Then
            idx = idx + 5
            ScanOnce = False
            Exit Function
        End If
        
        Set ms = NumberRegex.Execute(Mid(str,idx))
        If ms.Count = 1 Then
            idx = idx + ms(0).Length
            ScanOnce = CDbl(ms(0))
            Exit Function
        End If
        
        Err.Raise 8732,"No JSON object could be ScanOnced"
    End Function

    Private Function ParSEObject(ByRef str,key,value
        Set ParSEObject = CreateObject("Scripting.Dictionary")
        idx = SkipWhitespace(str,1)
        
        If c = "}" Then
            Exit Function
        ElseIf c <> """" Then
            Err.Raise 8732,"Expecting property name"
        End If

        idx = idx + 1
        
        Do
            key = ParseString(str,idx)

            idx = SkipWhitespace(str,idx)
            If Mid(str,1) <> ":" Then
                Err.Raise 8732,"Expecting : delimiter"
            End If

            idx = SkipWhitespace(str,idx + 1)
            If Mid(str,1) = "{" Then
                Set value = ScanOnce(str,idx)
            Else
                value = ScanOnce(str,idx)
            End If
            ParSEObject.Add key,value

            idx = SkipWhitespace(str,idx)
            c = Mid(str,1)
            If c = "}" Then
                Exit Do
            ElseIf c <> "," Then
                Err.Raise 8732,"Expecting,delimiter"
            End If

            idx = SkipWhitespace(str,idx + 1)
            c = Mid(str,1)
            If c <> """" Then
                Err.Raise 8732,"Expecting property name"
            End If

            idx = idx + 1
        Loop

        idx = idx + 1
    End Function
    
    Private Function ParseArray(ByRef str,values,value
        Set values = CreateObject("Scripting.Dictionary")
        idx = SkipWhitespace(str,1)

        If c = "]" Then
            ParseArray = values.Items
            Exit Function
        End If

        Do
            idx = SkipWhitespace(str,idx)
            End If
            values.Add values.Count,1)
            If c = "]" Then
                Exit Do
            ElseIf c <> ",delimiter"
            End If

            idx = idx + 1
        Loop

        idx = idx + 1
        ParseArray = values.Items
    End Function
    
    Private Function ParseString(ByRef str,ByRef idx)
        Dim chunks,content,terminator,ms,esc,char
        Set chunks = CreateObject("Scripting.Dictionary")

        Do
            Set ms = StringChunk.Execute(Mid(str,idx))
            If ms.Count = 0 Then
                Err.Raise 8732,"Unterminated string starting"
            End If
            
            content = ms(0).Submatches(0)
            terminator = ms(0).Submatches(1)
            If Len(content) > 0 Then
                chunks.Add chunks.Count,content
            End If
            
            idx = idx + ms(0).Length
            
            If terminator = """" Then
                Exit Do
            ElseIf terminator <> "" Then
                Err.Raise 8732,"Invalid control character"
            End If
            
            esc = Mid(str,1)

            If esc <> "u" Then
                Select Case esc
                    Case """" char = """"
                    Case ""  char = ""
                    Case "/"  char = "/"
                    Case "b"  char = b
                    Case "f"  char = f
                    Case "n"  char = n
                    Case "r"  char = r
                    Case "t"  char = t
                    Case Else Err.Raise 8732,"Invalid escape"
                End Select
                idx = idx + 1
            Else
                char = ChrW("&H" & Mid(str,idx + 1,4))
                idx = idx + 5
            End If

            chunks.Add chunks.Count,char
        Loop

        ParseString = Join(chunks.Items,"")
    End Function

    Private Function SkipWhitespace(ByRef str,ByVal idx)
        Do While idx <= Len(str) And _
            InStr(Whitespace,1)) > 0
            idx = idx + 1
        Loop
        SkipWhitespace = idx
    End Function

End Class
'-----------解析json结束-----------

'==============以上为自定义函数==============

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读