捐血一袋救人一命

2010年4月21日 星期三

自製動態 Public IP 檢查回報系統

有很多人(公司或個人),都是使用浮動 IP 的 ADSL,這導致 IT 人員進行遠端管理或維護時的困難。

坊間的解決方案多是使用 DDNS ,其他可以通報 IP 變動的工具大多都是要錢的...

其實這樣的程式也不難,要額外收費實在令人難以接受...

廢話不多說,底下就是我寫的WSH程式,

第一次執行後,會把你的 Public IP Address 寄到你指定的信箱,

之後每五分鐘會再 Check 一次 Public IP,如果IP 有變動,才會再寄信通知。

PS.該程式寄信並不需要你自己架Mail Service,可以在網路上找個 SMTP Server來用即可。


On Error Resume Next

strDynamicIP = "xxx.xxx.xxx.xxx"

' 這個網址可以替換成你自己喜好的查詢 IP 地址的網站
strURL="
http://briian.com/files/act/myip-widget.php"

Set objHTTP = CreateObject("MSXML2.XMLHTTP")

Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True  
objRegEx.Pattern = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

Set objEmail = CreateObject("CDO.Message")

while true
objHTTP.Open "GET", strURL, FALSE
objHTTP.Send

Set colMatches = objRegEx.Execute(objHTTP.ResponseText)

For Each strMatch in colMatches
  strPublicIP = strMatch.Value
Next

' 網頁內容沒有 IP Address,考慮換個網站吧
if colMatches.Count < 1 then
  WScript.Echo "IP Address Not Found !"
end if
' 如果抓出來的網頁只有一個 IP Address,而且跟之前抓的不一樣,表示 IP 有變動,要通知囉
if colMatches.Count = 1 and strDynamicIP <> strPublicIP then
  objEmail.From = "
寄信人信箱地址"
  objEmail.To = "
收件人信箱地址"
  objEmail.Subject = "Your Public IP : " & strPublicIP
  objEmail.Textbody = strPublicIP
  objEmail.Configuration.Fields.Item ("
http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  objEmail.Configuration.Fields.Item ("
http://schemas.microsoft.com/cdo/configuration/smtpserver") = "SMTP Server的FQDN或IP"
  objEmail.Configuration.Fields.Item ("
http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  objEmail.Configuration.Fields.Item ("
http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  objEmail.Configuration.Fields.Item ("
http://schemas.microsoft.com/cdo/configuration/sendusername") = "你的E-Mail帳號"
  objEmail.Configuration.Fields.Item ("
http://schemas.microsoft.com/cdo/configuration/sendpassword") = "你的e-Mail密碼"
  objEmail.Configuration.Fields.Update
  objEmail.Send
  strDynamicIP = strPublicIP
end if
' 如果抓出來的網頁內容,超過一個 IP Address,就要改程式去分析網頁囉
if colMatches.Count > 1 then
  WScript.Echo "Too Many IPs !"
end if

' 每隔 5 分鐘抓一次網頁,Check Public IP
wscript.sleep 300000
wend

0 意見: