找回密码
 加入
搜索
查看: 3066|回复: 7

[网络通信] [求助]让脚本以服务的形式启动,如果外网IP有变化就发送邮件

  [复制链接]
发表于 2011-3-28 13:30:44 | 显示全部楼层 |阅读模式

最近花生壳总是不给力,暂时有没有找到什么类似花生壳这样定位IP的服务。所以想做一个这东西。

主要就是检测你现在的外网IP,如果有变化就给你发邮件。不过这需要把AU3做成一个服务,就是那种不登陆就可以启动的。现在就做服务这块我最不会了。其他方面还好。
发表于 2011-3-28 15:56:49 | 显示全部楼层
弄到操作系统计划任务怎么样?
服务我也不会。。。
 楼主| 发表于 2011-3-28 18:59:47 | 显示全部楼层
回复 2# ywq111

没戏,就要服务的~
发表于 2011-3-29 08:19:22 | 显示全部楼层
花生壳确实不给力啊,免费的都不支持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] > 0 Then
        Switch $cmdline[1]
                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[0]
                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[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)', 2)
                        If not @error then Return $ip[0]
                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

评分

参与人数 2金钱 +32 贡献 +3 收起 理由
love5173 + 10 强力啊
ac5474012 + 22 + 3 还是你给力

查看全部评分

 楼主| 发表于 2011-3-29 10:52:32 | 显示全部楼层
本帖最后由 ac5474012 于 2011-3-29 10:54 编辑

回复 4# bob

谢 我试试看,不过你这个如果ip不对就干什么了?好像是对3322做了点什么?
发表于 2011-3-29 11:20:20 | 显示全部楼层
IP不对,就更新动态域名的IP,等动态域名解析成功后访问的域名地址就是正确的IP了

因为域名解析需要时间,所以没必要实时的去检测外网IP了
 楼主| 发表于 2011-3-29 11:28:37 | 显示全部楼层
那就是辅助一下3322是吧,这样我明白了。
发表于 2011-3-29 12:30:53 | 显示全部楼层
不错,收藏了,另外顶一下帖子
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 14:04 , Processed in 0.089962 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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