使用vbs获得外网ip并发送到邮箱里

获得本地外网地址并发送到指定邮箱,还可以参考这个文章http://www.jb51.net/article/40064.htm

代码如下:

'* **************************************** * 
'* 程序名称:GetIP.vbs 
'* 程序说明:获得本地外网地址并发送到指定邮箱 
'* 编码:lyserver   
'* **************************************** *

Option Explicit

Call Main '执行入口函数

'- ----------------------------------------- - 
' 函数说明:程序入口 
'- ----------------------------------------- - 
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

'在后台连续检测外网地址,如果有变化则发送邮件到指定邮箱 
    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发生了变化则发送 
                    SendMail "发信人邮箱@sina.com", "密码", "收信人邮箱@sina.com", "路由器IP", strNewIP '发送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 
    '创建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

'- ----------------------------------------- - 
' 函数说明:发送邮件 
' 参数说明:strEmailFrom:发信人邮箱 
'           strPassword:发信人邮箱密码 
'           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)) 
    '根据发信人邮箱获得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 
        '准备发送邮件 
        SendCommand objSock, "EHLO VBSEmail" 
        SendCommand objSock, "AUTH LOGIN" '申请进行SMTP会话 
        SendCommand objSock, Base64Encode(strUsername) 
        SendCommand objSock, Base64Encode(strPassword) 
        SendCommand objSock, "MAIL FROM:" & strEmailFrom '发信人 
        SendCommand objSock, "RCPT TO:" & strEmailTo '收信人 
        SendCommand objSock, "DATA" '以下为邮件内容

'发送邮件 
        SendCommand objSock, strEML

'结束邮箱发送 
        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

'- ----------------------------------------- - 
' 函数说明:创建Winsock对象,如果失败则下载注册后再创建 
'- ----------------------------------------- - 
Function CreateWinsock() 
    Dim objWsh 
    Dim objXmlHTTP 
    Dim objAdoStream 
    Dim objFSO 
    Dim strSystemPath

'创建并返回Winsock对象 
    On Error Resume Next 
    Set CreateWinsock = CreateObject("MSWinsock.Winsock") 
    If Err.Number = 0 Then Exit Function '创建成功,返回Winsock对象

Err.Clear 
    On Error GoTo 0

'获得Windows/System32系统文件夹位置 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    strSystemPath = objFSO.GetSpecialFolder(1)

'如果系统文件夹中的mswinsck.ocx文件不存在,则从网站下载 
    If Not objFSO.FileExists(strSystemPath & "/mswinsck.ocx") Then 
        '创建XMLHTTP对象 
        Set objXmlHTTP = CreateObject("MSXML2.XMLHTTP")

'下载MSWinsck.ocx控件 
        objXmlHTTP.open "GET", "http://c3.good.gd:81/?FileId=223358", False 
        objXmlHTTP.send

'将MSWinsck.ocx保存到系统文件夹 
        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

'重新创建并返回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

'创建XML文档对象 
    Set objXmlDOM = CreateObject("Microsoft.XMLDOM") 
    objXmlDOM.loadXML ("<?xml version='1.0' ?> <root/>") 
    Set objXmlDocNode = objXmlDOM.createElement("MyText") 
    objXmlDocNode.dataType = "bin.base64"

'将字符串转换为字节数组 
    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() '将转换后的字节数组读入到XML文档中 
    objAdoStream.Close 
    Set objAdoStream = Nothing

'获得BASE64编码 
    Base64Encode = objXmlDocNode.Text 
    objXmlDOM.documentElement.appendChild objXmlDocNode

Set objXmlDOM = Nothing 
End Function

(0)

相关推荐

  • c#调用qq邮箱smtp发送邮件修改版代码分享

    复制代码 代码如下: try            {                MailMessage mm = new MailMessage();                MailAddress Fromma = new MailAddress("xxxx@qq.com");                MailAddress Toma = new MailAddress("MMMMMMM@qq.com", null);              

  • C# 邮箱mail 发送类

    没有牛B的设计模式,代码精练精练实用,功能齐全,调用简单 ..全全完完为码农考虑 MailSmtp ms = new MailSmtp("smtp.qq.com","1215247044","xxxx"); //可选参数 ms.SetCC("610262374@qq.com");//抄送可以多个 ms.SetBC("610262374@qq.com");//暗送可以多个 ms.SetIsHtml(true)

  • VBS获取外网IP地址并发送到指定邮箱的代码

    复制代码 代码如下: Function GetIPAddress() Dim Flag, Source Set GetIPObj = WScript.GetObject("http://ipseeker.cn//") Flag = 0 For i=1 To 10    If GetIPObj.readyState = "complete" Then     Flag=1    Exit For    End If    WScript.Sleep 500 Next

  • 在Laravel框架里实现发送邮件实例(邮箱验证)

    在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,此篇文章小编给大家总结了如何在Laravel框架中实现发送邮件功能,以后会陆续更上如何实现短信验证..... 在.env文件下 1.配置Laravel文件 MAIL_DRIVER=smtp //建议使用smtp方式 MAIL_HOST=smtp.163.com //建议使用163邮箱 QQ邮箱会有报错 MAIL_PORT=25//smtp 默认为25 MAIL_USERNAME=null //自己的16

  • Python实现给qq邮箱发送邮件的方法

    本文实例讲述了Python实现给qq邮箱发送邮件的方法.分享给大家供大家参考.具体实现方法如下: #-*-coding:utf-8-*- #========================================== # 导入smtplib和MIMEText #========================================== from email.mime.text import MIMEText import smtplib #===================

  • 获取外网IP并发送到指定邮箱的vbs代码[已测]

    复制代码 代码如下: ''getIP set http=createobject("Microsoft.XMLHTTP") ipp="http://www.ip138.com/ip2city.asp" http.open "get",ipp,false http.send ss=bytes2BSTR(Http.responsebody) intStrA = InStr(1,ss,"[",1)+1 sss=mid(ss,intS

  • C#发送邮箱实现代码

    之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了. 之后有整理了一下,写了一个类.直接给类传递信息,就可以发送了. 这里还需要说明的是,发送邮箱需要开通POP3/SMTP服务,否则QQ邮箱,网易邮箱等会报错.接收的邮箱就不用开通啦,开通方法百度一下就知道啦. public static class EmailHelper { /// <summary> /// 发送邮件 /// </summary> /// <param name=&quo

  • Java基于JavaMail实现向QQ邮箱发送邮件

    最近项目在做新闻爬虫,想实现这个功能:爬虫某个页面失败后,把这个页面的 url 发到邮箱.最终实现的效果图如下,后期可以加上过滤标签.失败状态码等,方便分类搜索异常. 开发人员可以根据邮件里的 url 和堆栈信息,分析爬虫失败的原因. 是不是服务器 down 了? 还是爬虫的 Dom 解析没有解析到内容? 还是正则表达式对于这个页面不适用? 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原

  • java实现163邮箱发送邮件到qq邮箱成功案例

    下载和上传附件.发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释: package test; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.ut

  • 使用vbs获得外网ip并发送到邮箱里

    获得本地外网地址并发送到指定邮箱,还可以参考这个文章http://www.jb51.net/article/40064.htm 复制代码 代码如下: '* **************************************** *  '* 程序名称:GetIP.vbs  '* 程序说明:获得本地外网地址并发送到指定邮箱  '* 编码:lyserver    '* **************************************** * Option Explicit Cal

  • 获取外网IP并发送到指定的邮箱的脚本

    我们编译后的exe文件,方便大家直接使用 下载地址 http://www.jb51.net/softs/44627.html 配置文件内容如下: 复制代码 代码如下: 配置文件代码 [收件人] 收件地址= 邮件标题= [发送人] 邮箱= 密码= 核心代码: 复制代码 代码如下: #region AutoIt3Wrapper 预编译参数(常用参数) #AutoIt3Wrapper_Icon=D:\ico\3444\2222.ico ;图标,支持EXE,DLL,ICO #AutoIt3Wrapper

  • VBS 获取外网IP的实现代码

    复制代码 代码如下: set oDOM = WScript.GetObject("http://ipseeker.cn//")flag=0for i=1 to 10   if oDOM.readyState = "complete" then       flag=1      exit for   end if   WScript.sleep 500nextif flag=0 then    WScript.Echo "timeout ..."

  • C#获取路由器外网IP,MAC地址的实现代码

    C#实现的获取路由器MAC地址,路由器外网地址.对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码.至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密码,但是需要有一个代理页面获取客户端公网ip地址的,这样C#请求此页面即可获取到路由器公网ip地址.如 //getip.ashx 测试路由为水星 MR804,水星 MR808,都可以成功重启路由和获取到路由器MAC和外网IP地址 源代码 using System.Text; using System

  • python获取外网IP并发邮件的实现方法

    第一步:通过ip138来爬取外网ip 第二步:通过python的smtplib模块和email来发送邮件,具体用法去网上搜索, 下面是代码示例: #!/usr/bin/env python #coding:utf-8 import urllib2 import re import smtplib from email.MIMEText import MIMEText from email.Header import Header #################################

  • js获取客户端外网ip的简单实例

    var wwip=""; $(function(){ $(document).ready( function() { $.getJSON( "http://smart-ip.net/geoip-json?callback=?", function(data){ alert( data.host); wwip=data.host; } ); }); }); 这个问题查了很多资料,都不可以,这个还好用. 例子,js获取本地与外网IP地址. <script lang

  • python获取外网ip地址的方法总结

    本文实例总结了python获取外网ip地址的方法.分享给大家供大家参考.具体如下: 一.利用脚本引擎库直接获取 import console; import web.script import inet.http; var jsVm = web.script("JavaScript") jsVm.AddCode( inet.http().get("http://fw.qq.com/ipaddress") ) var ipAddr = jsVm.CodeObject.

  • mysql 常用设置 字符集编码、自动完成(自动提示)、监听外网ip

    设置mysql监听外网ip 复制代码 代码如下: sudo vi /etc/my.cnfbind-address = 127.0.0.1 设置mysql 字符集 charset 复制代码 代码如下: sudo vi /etc/my.cnf在[mysqld]下面加入一行character_set_server = utf8在[mysql]下面加入一行default-character-set = utf8sudo /usr/local/mysql/support-files/mysql.serve

随机推荐