由于公司ip不固定只能使用域名动态解析,但是公司外放的服务器开着防火墙又需要cactie外部监控,不得不写一个挂载脚本去动态解析ip写入防火墙。又加上该服务器windows还不准装任何不相干的语言环境。。。。python无处施展能力,不得不用vbs解决。
Dim http,IP1,IP2
`外部网站解析域名
Function getIP(domain)
set fs =createobject("scripting.filesystemobject")
Set http = CreateObject("Msxml2.ServerXMLHTTP")
http.open "GET","http://m.ip138.com/ip.asp?ip="&domain, False
http.send
Set Rs = New RegExp
Rs.Global = True
Rs.IgnoreCase = True
Rs.Pattern = "((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))"
Set Match = Rs.Execute(http.responsetext)
For Each m In Match
getIP=m.Value
exit for
Next
End Function
`添加防火墙规则
Function Addfirewall(name,port,state,remoteaddr)
Set objFirewall=CreateObject("HNetCfg.FwMgr")
Set objPolicy=objFirewall.LocalPolicy.CurrentProfile
Set objPort=CreateObject("HNetCfg.FwOpenPort")
objPort.Port=port
objPort.Name=name
objPort.Enabled=state
objPort.RemoteAddresses=remoteaddr
Set colPorts=objPolicy.GloballyOpenPorts
colPorts.Add(objPort)
End Function
`本地解析域名
Function getIP_local(domain)
Dim objShell : Set objShell = WScript.CreateObject("WScript.Shell")
Dim strHostname : strHostname = domain
Dim objRet : Set objRet = objShell.Exec("%comspec% /c nslookup -type=a -retry=1 -timeout=0 " & strHostname)
Dim objStdErr : Set objStdErr = objRet.StdErr
Dim flgFound : flgFound = true
Do Until objStdErr.AtEndOfStream
If Left(objStdErr.ReadLine(), 3) = "***" Then
flgFound = false
Exit Do
End If
Loop
getIP_local = ""
If flgFound Then
Dim strLine
Dim objStdOut : Set objStdOut = objRet.StdOut
Do Until objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine()
If Left(strLine, 7) = "Address" Then
getIP_local = Split(strLine, " ")(2)
End If
Loop
End If
End Function
IP1=getIP_local("域名A")
IP2=getIP_local("域名B")
Set objFirewall = CreateObject("HNetCfg.FwMgr")
Set objPolicy = objFirewall.LocalPolicy.CurrentProfile
Set colPorts = objPolicy.GloballyOpenPorts
if ((IP1<>"") And (IP2<>"")) then
on error resume next
set objPort = colPorts.Item("规则名",6)
if err.number<>0 then
Call Addfirewall("规则名",端口,1,IP1&","&IP2)
set objPort = colPorts.Item("规则名",6)
end if
Err.Clear
On Error Goto 0
if (objPort.RemoteAddresses<>(IP1&"/255.255.255.255,"&IP2&"/255.255.255.255") and objPort.RemoteAddresses<>(IP2&"/255.255.255.255,"&IP1&"/255.255.255.255")) then
objPort.RemoteAddresses=IP1&","&IP2
end if
end if