找回密码
 加入
搜索
查看: 6242|回复: 13

[原创] 希网动态域名更新器 源码

  [复制链接]
发表于 2011-5-22 21:08:35 | 显示全部楼层 |阅读模式
本帖最后由 moech 于 2011-6-5 13:18 编辑
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=希网动态域名更新器
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#EndRegion


#include "WinHttp.au3"  ;需要用到winhttp的UDF,没有的附件里下载

#NoTrayIcon

Opt("MustDeclareVars", 1)


If $CmdLine[0] <> 0 Then ;  /i 开机自启动 /u 删除开机启动
        If StringUpper(StringMid($CmdLine[1], 2, 1)) = "I" Then
                _Install()
        ElseIf StringUpper(StringMid($CmdLine[1], 2, 1)) = "U" Then
                _UnInstall()
        Else
                MsgBox(64, "提示", @CRLF & "参数:" & @CRLF & @CRLF & "  /I 添加开机启动    " & @CRLF & @CRLF & "  /U 删除开机启动    " & @CRLF, 5)
        EndIf
Else
        _Main()
EndIf

Func _Install()
        RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "动态域名更新器")
        RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "动态域名更新器", "REG_SZ", @ScriptFullPath)
EndFunc   ;==>_Install

Func _UnInstall()
        RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "动态域名更新器")
EndFunc   ;==>_UnInstall



Func _DynDns()
        Local $dyndns = "xxx.3322.org" ;你的希网动态域名
        Local $User = "xxxxxx" ;希网的账号
        Local $Pass = "xxxxxx" ;密码
        Local $myip = _MyIP()
        While $myip = 0 ;获取不到本机IP就一直循环
                $myip = _MyIP()
                Sleep(30000) ;休息30秒再获取本机IP
        WEnd
        Local $sHost = "members.3322.org"
        Local $hOpen = _WinHttpOpen("Cn99CIP/1.1.0")
        Local $hConnect = _WinHttpConnect($hOpen, $sHost)
        ; 指定请求
        Local $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/dyndns/update?system=dyndns&hostname=" & $dyndns & "&myip=" & $myip & "&wildcard=OFF&backmx=NO&offline=NO")
        ; 设置凭证
        _WinHttpSetCredentials($hRequest, $WINHTTP_AUTH_TARGET_SERVER, $WINHTTP_AUTH_SCHEME_BASIC, $User, $Pass)
        ; 发送请求
        _WinHttpSendRequest($hRequest)
        ; 等待响应
        _WinHttpReceiveResponse($hRequest)

        ;下面隐去的是用来记录日志的  返回的数据 $sData
;~         Local $sChunk, $sData
;~         If _WinHttpQueryDataAvailable($hRequest) Then
;~                 While 1
;~                         $sChunk = _WinHttpReadData($hRequest)
;~                         If @error Then ExitLoop
;~                         $sData &= $sChunk
;~                 WEnd
;~                 FileWriteLine(StringTrimRight(@ScriptName, 4) & ".Log", @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & "  -  " & $sData)
;~                 Return 1
;~         Else
;~                 FileWriteLine(StringTrimRight(@ScriptName, 4) & ".Log", @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & "  -  Send Error " & $myip)
;~                 Return 0
;~         EndIf
        _WinHttpCloseHandle($hRequest)
        _WinHttpCloseHandle($hConnect)
        _WinHttpCloseHandle($hOpen)
EndFunc   ;==>_DynDns



Func _MyIP() ;获取本机IP
        Local $sChunk, $sData
        Local $sHost = "www.3322.org"
        Local $hOpen = _WinHttpOpen("Cn99CIP/1.1.0")
        Local $hConnect = _WinHttpConnect($hOpen, $sHost)
        Local $hRequest = _WinHttpOpenRequest($hConnect, "GET", "/dyndns/getip")
        _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded")
        _WinHttpReceiveResponse($hRequest)
        If _WinHttpQueryDataAvailable($hRequest) Then
                While 1
                        $sChunk = _WinHttpReadData($hRequest)
                        If @error Then ExitLoop
                        $sData &= $sChunk
                WEnd
        Else
                $sData = 0 ;获取失败 返回 0
        EndIf
        _WinHttpCloseHandle($hRequest)
        _WinHttpCloseHandle($hConnect)
        _WinHttpCloseHandle($hOpen)
        Return StringStripCR(StringStripWS($sData, 8))
EndFunc   ;==>_MyIP

Func _Main()
        Local $existpid = ProcessList(@ScriptName)
        If $existpid[0][0] > 1 Then ;如果本程序运行两个实例则退出
                Exit
        EndIf

        While 1 ;程序运行后 在后台一直循环检测
                If Ping("www.baidu.com") = 0 Then ;用来做开机的延迟运行
                        Sleep(10000) ;休息10s
                Else
                        If _DynDns() Then
                                Sleep(900000) ;15分钟更新一次IP,不建议这里时间设置的太短
                        Else
                                Sleep(30000) ;更新失败时 先休息30s再说
                        EndIf
                EndIf
        WEnd
        
EndFunc   ;==>_Main
附件:
Winhttp的UDF文件

Winhttp的中文使用帮助文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-12-6 09:30:43 | 显示全部楼层
感谢 源码 thanks
发表于 2012-2-28 16:55:15 | 显示全部楼层
有机会跟楼主好好学习了
发表于 2012-3-10 00:40:04 | 显示全部楼层
支持下线 呵呵
发表于 2012-3-10 00:41:10 | 显示全部楼层
没钱了,救命啊
发表于 2012-3-10 22:04:38 | 显示全部楼层
支持支持下原创者。。
发表于 2012-3-13 14:31:26 | 显示全部楼层
支持原创的东西,谢谢楼主的大力分享
发表于 2012-4-2 13:29:35 | 显示全部楼层
非常感谢LZ的源代码, 正在学习相关知识
发表于 2012-4-24 19:52:29 | 显示全部楼层
运行后没有任何反映。被扣钱咯。
发表于 2012-4-24 19:52:30 | 显示全部楼层
运行后没有任何反映。被扣钱咯。
发表于 2012-4-24 19:52:31 | 显示全部楼层
运行后没有任何反映。被扣钱咯。
发表于 2012-5-5 13:32:47 | 显示全部楼层
支持原创的东西,谢谢楼主的大力分享
发表于 2012-5-7 19:05:43 | 显示全部楼层
谢谢楼主的大力分享
发表于 2013-1-11 04:15:48 | 显示全部楼层
感谢分享。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-28 16:53 , Processed in 0.079040 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表