使用vbs獲得外網ip并發(fā)送到郵箱里
來源:易賢網 閱讀:999 次 日期:2016-06-24 09:47:09
溫馨提示:易賢網小編為您整理了“使用vbs獲得外網ip并發(fā)送到郵箱里”,方便廣大網友查閱!

代碼如下:

'* **************************************** *

'* 程序名稱:getip.vbs

'* 程序說明:獲得本地外網地址并發(fā)送到指定郵箱

'* 編碼:lyserver

'* **************************************** *

option explicit

call main '執(zhí)行入口函數

'- ----------------------------------------- -

' 函數說明:程序入口

'- ----------------------------------------- -

sub main()

dim objwsh

dim objenv

dim strnewip, stroldip

dim dtstarttime

dim ninstance

stroldip =

dtstarttime = dateadd(n, -30, now) '設置起始時間

'獲得運行實例數,如果大于1,則結束以前運行的實例

set objwsh = createobject(wscript.shell)

set objenv = createobject(wscript.shell).environment(system)

ninstance = val(objenv(getiptoemail)) + 1 '運行實例數加1

objenv(getiptoemail) = ninstance

if ninstance > 1 then exit sub '如果運行實例數大于1則退出,以防重復運行

'開啟遠程桌面

'enabledrometedesktop true, null

'在后臺連續(xù)檢測外網地址,如果有變化則發(fā)送郵件到指定郵箱

do

if err.number <> 0 then exit do

if datediff(n, dtstarttime, now) >= 30 then '半小時檢查一次ip

dtstarttime = now '重置起始時間

strnewip = getwanip '獲得本地的公網ip地址

if len(strnewip) > 0 then

if strnewip <> stroldip then '如果ip發(fā)生了變化則發(fā)送

sendmail 發(fā)信人郵箱@sina.com, 密碼, 收信人郵箱@sina.com, 路由器ip, strnewip '發(fā)送ip到指定郵箱

stroldip = strnewip '重置原來的ip

end if

end if

end if

wscript.sleep 2000 '延時2秒,以釋放cpu資源

loop until val(objenv(getiptoemail)) > 1

objenv.remove getiptoemail '清除運行實例數變量

set objenv = nothing

set objwsh = nothing

msgbox 程序被成功終止!, 64, 提示

end sub

'- ----------------------------------------- -

' 函數說明:開啟遠程桌面

' 參數說明:blnenabled是否開啟,true開啟,false關閉

' nport遠程桌面的端口號,默認為3389

'- ----------------------------------------- -

sub enabledrometedesktop(blnenabled, nport)

dim objwsh

if blnenabled then

blnenabled = 0 '0表示開啟

else

blnenabled = 1 '1表示關閉

end if

set objwsh = createobject(wscript.shell)

'開啟遠程桌面并設置端口號

objwsh.regwrite hkey_local_machine/system/currentcontrolset/control/terminal server/fdenytsconnections, blnenabled, reg_dword '開啟遠程桌面

'設置遠程桌面端口號

if isnumeric(nport) then

if nport > 0 then

objwsh.regwrite hkey_local_machine/system/currentcontrolset/control/terminal server/wds/rdpwd/tds/tcp/portnumber, nport, reg_dword

objwsh.regwrite hkey_local_machine/system/currentcontrolset/control/terminal server/winstations/rdp-tcp/portnumber, nport, reg_dword

end if

end if

set objwsh = nothing

end sub

'- ----------------------------------------- -

' 函數說明:獲得公網ip

'- ----------------------------------------- -

function getwanip()

dim npos

dim objxmlhttp

getwanip =

on error resume next

'創(chuàng)建xmlhttp對象

set objxmlhttp = createobject(msxml2.xmlhttp)

'導航至http://www.ip138.com/ip2city.asp獲得ip地址

objxmlhttp.open get, http://iframe.ip138.com/ic.asp, false

objxmlhttp.send

'提取html中的ip地址字符串

npos = instr(objxmlhttp.responsetext, [)

if npos > 0 then

getwanip = mid(objxmlhttp.responsetext, npos + 1)

npos = instr(getwanip, ])

if npos > 0 then getwanip = trim(left(getwanip, npos - 1))

end if

'銷毀xmlhttp對象

set objxmlhttp = nothing

end function

'- ----------------------------------------- -

' 函數說明:將字符串轉換為數值

'- ----------------------------------------- -

function val(vnum)

if isnumeric(vnum) then

val = cdbl(vnum)

else

val = 0

end if

end function

'- ----------------------------------------- -

' 函數說明:發(fā)送郵件

' 參數說明:stremailfrom:發(fā)信人郵箱

' strpassword:發(fā)信人郵箱密碼

' stremailto:收信人郵箱

' strsubject:郵件標題

' strtext:郵件內容

'- ----------------------------------------- -

function sendmail(stremailfrom, strpassword, stremailto, strsubject, strtext)

dim i, npos

dim strusername

dim strsmtpserver

dim objsock

dim streml

const sckconnected = 7

set objsock = createwinsock()

objsock.protocol = 0

npos = instr(stremailfrom, @)

'校驗參數完整性和合法性

if npos = 0 or instr(stremailto, @) = 0 or len(strtext) = 0 or len(strpassword) = 0 then exit function

'根據郵箱名稱獲得郵箱帳號

strusername = trim(left(stremailfrom, npos - 1))

'根據發(fā)信人郵箱獲得esmtp服務器名稱

strsmtpserver = smtp. & trim(mid(stremailfrom, npos + 1))

'組裝郵件

streml = mime-version: 1.0 & vbcrlf

streml = streml & from: & stremailfrom & vbcrlf

streml = streml & to: & stremailto & vbcrlf

streml = streml & subject: & =?gb2312?b? & base64encode(strsubject) & ?= & vbcrlf

streml = streml & content-type: text/plain; & vbcrlf

streml = streml & content-transfer-encoding: base64 & vbcrlf & vbcrlf

streml = streml & base64encode(strtext)

streml = streml & vbcrlf & . & vbcrlf

'連接到郵件服務哭

objsock.connect strsmtpserver, 25

'等待連接成功

for i = 1 to 10

if objsock.state = sckconnected then exit for

wscript.sleep 200

next

if objsock.state = sckconnected then

'準備發(fā)送郵件

sendcommand objsock, ehlo vbsemail

sendcommand objsock, auth login '申請進行smtp會話

sendcommand objsock, base64encode(strusername)

sendcommand objsock, base64encode(strpassword)

sendcommand objsock, mail from: & stremailfrom '發(fā)信人

sendcommand objsock, rcpt to: & stremailto '收信人

sendcommand objsock, data '以下為郵件內容

'發(fā)送郵件

sendcommand objsock, streml

'結束郵箱發(fā)送

sendcommand objsock, quit

end if

'斷開連接

objsock.close

wscript.sleep 200

set objsock = nothing

end function

'- ----------------------------------------- -

' 函數說明:sendmail的輔助函數

'- ----------------------------------------- -

function sendcommand(objsock, strcommand)

dim i

dim strecho

on error resume next

objsock.senddata strcommand & vbcrlf

for i = 1 to 50 '等待結果

wscript.sleep 200

if objsock.bytesreceived > 0 then

objsock.getdata strecho, vbstring

if (val(strecho) > 0 and val(strecho) < 400) or instr(strecho, +ok) > 0 then

sendcommand = true

end if

exit function

end if

next

end function

'- ----------------------------------------- -

' 函數說明:創(chuàng)建winsock對象,如果失敗則下載注冊后再創(chuàng)建

'- ----------------------------------------- -

function createwinsock()

dim objwsh

dim objxmlhttp

dim objadostream

dim objfso

dim strsystempath

'創(chuàng)建并返回winsock對象

on error resume next

set createwinsock = createobject(mswinsock.winsock)

if err.number = 0 then exit function '創(chuàng)建成功,返回winsock對象

err.clear

on error goto 0

'獲得windows/system32系統(tǒng)文件夾位置

set objfso = createobject(scripting.filesystemobject)

strsystempath = objfso.getspecialfolder(1)

'如果系統(tǒng)文件夾中的mswinsck.ocx文件不存在,則從網站下載

if not objfso.fileexists(strsystempath & /mswinsck.ocx) then

'創(chuàng)建xmlhttp對象

set objxmlhttp = createobject(msxml2.xmlhttp)

'下載mswinsck.ocx控件

objxmlhttp.open get, , false

objxmlhttp.send

'將mswinsck.ocx保存到系統(tǒng)文件夾

set objadostream = createobject(adodb.stream)

objadostream.type = 1 'adtypebinary

objadostream.open

objadostream.write objxmlhttp.responsebody

objadostream.savetofile strsystempath & /mswinsck.ocx, 2 'adsavecreateoverwrite

objadostream.close

set objadostream = nothing

'銷毀xmlhttp對象

set objxmlhttp = nothing

end if

'注冊mswinsck.ocx

set objwsh = createobject(wscript.shell)

objwsh.regwrite hkey_classes_root/licenses/2c49f800-c2dd-11cf-9ad6-0080c7e7b78d/, mlrljgrlhltlngjlthrligklpkrhllglqlrk '添加許可證

objwsh.run regsvr32 /s & strsystempath & /mswinsck.ocx, 0 '注冊控件

set objwsh = nothing

'重新創(chuàng)建并返回winsock對象

set createwinsock = createobject(mswinsock.winsock)

end function

'- ----------------------------------------- -

' 函數說明:base64編碼函數

'- ----------------------------------------- -

function base64encode(strsource)

dim objxmldom

dim objxmldocnode

dim objadostream

base64encode =

if strsource = or isnull(strsource) then exit function

'創(chuàng)建xml文檔對象

set objxmldom = createobject(microsoft.xmldom)

objxmldom.loadxml (<?xml version='1.0' ?> <root/>)

set objxmldocnode = objxmldom.createelement(mytext)

objxmldocnode.datatype = bin.base64

'將字符串轉換為字節(jié)數組

set objadostream = createobject(adodb.stream)

objadostream.mode = 3

objadostream.type = 2

objadostream.open

objadostream.charset = gb2312

objadostream.writetext strsource

objadostream.position = 0

objadostream.type = 1

objxmldocnode.nodetypedvalue = objadostream.read() '將轉換后的字節(jié)數組讀入到xml文檔中

objadostream.close

set objadostream = nothing

'獲得base64編碼

base64encode = objxmldocnode.text

objxmldom.documentelement.appendchild objxmldocnode

set objxmldom = nothing

end function

更多信息請查看腳本欄目

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網