[求助]让脚本以服务的形式启动,如果外网IP有变化就发送邮件
问最近花生壳总是不给力,暂时有没有找到什么类似花生壳这样定位IP的服务。所以想做一个这东西。
主要就是检测你现在的外网IP,如果有变化就给你发邮件。不过这需要把AU3做成一个服务,就是那种不登陆就可以启动的。现在就做服务这块我最不会了。其他方面还好。 弄到操作系统计划任务怎么样?
服务我也不会。。。 回复 2# ywq111
没戏,就要服务的~ 花生壳确实不给力啊,免费的都不支持MX记录
我用的是3322的DDNS,但官方软件也不给力,经常自动关闭或不检测IP更新
只好自己操刀,简单写了一个,凑合着用吧
#include <Services.au3>
$sServiceName = "DDNS"
$User = IniRead(@ScriptDir & "\Config.ini", "Set", "User", "")
$Passwor = IniRead(@ScriptDir & "\Config.ini", "Set", "Password", "")
$Domain = IniRead(@ScriptDir & "\Config.ini", "Set", "Domain", "")
$DmIp = IniRead(@ScriptDir & "\Config.ini", "Set", "Ip", "")
If $cmdline > 0 Then
Switch $cmdline
Case "install", "-i", "/i"
InstallService()
Case "remove", "-u", "/u", "uninstall"
RemoveService()
Case Else
ConsoleWrite("说明 : " & @CRLF)
ConsoleWrite(" -i : 安装服务" & @CRLF)
ConsoleWrite(" -u : 卸载服务" & @CRLF)
Exit
EndSwitch
EndIf
While 1
Sleep(3000)
If _GetIP() <> $DmIp Then
IniWrite (@ScriptDir & "\Config.ini", "Set", "Ip", _GetIP())
;如果外网地址有变动,则更新域名IP
$oHTTP = ObjCreate("microsoft.xmlhttp")
$oHTTP.Open("post","http://"&$User&":"&$Passwor&"@members.3322.org/dyndns/update?system=dyndns&hostname="&$Domain&"&myip="&_GetIP()&"&wildcard=OFF&mx="&$Domain&"&backmx=NO&offline=NO",false)
$oHTTP.Send
EndIf
WEnd
_Service_init($sServiceName)
Func _GetIP()
$ipurl = 'http://www.ip138.com/ip2city.asp' & @cr & _
'http://www.123cha.com/ip/' & @cr & _
'http://ip.91cool.net/ip.php?type=ip' & @cr & _
'http://fw.qq.com/ipaddress'
$url = StringSplit($ipurl, @cr)
For $i = 1 to $url
If InetGet($url[$i], @TempDir & "\~ip.tmp") Then
$ip = FileRead(@TempDir & "\~ip.tmp", FileGetSize(@TempDir & "\~ip.tmp"))
FileDelete(@TempDir & "\~ip.tmp")
$ip = StringRegExp($ip, '((2\d|25|?\d\d?)\.){3}(2\d|25|?\d\d?)', 2)
If not @error then Return $ip
EndIf
Next
SetError(1)
Return -1
EndFunc
Func InstallService()
_Service_Create($sServiceName, "3322 Dynamic Domain Name Server", $SERVICE_WIN32_OWN_PROCESS, $SERVICE_DEMAND_START, $SERVICE_ERROR_IGNORE,'"' & @ScriptFullPath & '"')
Exit
EndFunc ;==>InstallService
Func RemoveService()
_Service_Stop($sServiceName)
_Service_Delete($sServiceName)
Exit
EndFunc ;==>RemoveService
本帖最后由 ac5474012 于 2011-3-29 10:54 编辑
回复 4# bob
谢 我试试看,不过你这个如果ip不对就干什么了?好像是对3322做了点什么? IP不对,就更新动态域名的IP,等动态域名解析成功后访问的域名地址就是正确的IP了
因为域名解析需要时间,所以没必要实时的去检测外网IP了 那就是辅助一下3322是吧,这样我明白了。 不错,收藏了,另外顶一下帖子
页:
[1]