用VB编写一个可以在ASP环境下调用的运行CMD命令的组件

有时我们在管理服务器时为了安全起见会禁用Windows Scripting Host,这样能防止某些不法用户利用WSH生成一个WebShell,对服务器造成很大的安全隐患。但如果我们又想禁用WSH,又想使用自己的WebShell用于服务器的管理怎么办呢?这里介绍了一种实现ASP中运行CMD并显示结果的组件编程。希望对大家能有所帮助。

首先我们新建一个ActiveDLL工程,命名为ASPCMD,新建的类命名为CMDShell。在“Project“的“Referenct“中添加一个引用:Microsoft Active Server Pages Object Library。

然后我们的思路是使用Window API ShellExecute调用cmd.exe,将运行的结果保存到一个临时文本文件,然后读出这个文件的内容显示出来。

以下是工程ASPCMD的类CMDShell.cls的代码。

Option Explicit
Dim rp As Response
Dim rq As Request
Dim ap As Application
Dim sr As Server
Dim sn As Session
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub ShellEx(ByVal sLocation As String, ByVal sPara As String, Optional MaxedForm As Boolean = False)
On Error GoTo errhandle:
Dim lR As Long
Dim Style As Long
Dim hWnd As Long
If MaxedForm Then
Style = vbMaximizedFocus
Else
Style = vbNormalFocus
End If

lR = ShellExecute(hWnd, "open", sLocation, sPara, "", Style)
If (lR < 0) Or (lR > 32) Then
'success
Else
rp.Write "Error Occered when starting the program " & sLocation
End If
errhandle:
rp.Write "Error:" & Err.Description
End Sub

Public Sub OnStartPage(ByVal mysc As ScriptingContext)
Set rp = mysc.Response
Set rq = mysc.Request
Set sr = mysc.Server
Set ap = mysc.Application
Set sn = mysc.Session
End Sub

Public Sub OnEndPage()
Set rp = Nothing
Set rq = Nothing
Set sr = Nothing
Set ap = Nothing
Set sn = Nothing
End Sub

Private Function FileExists(Filename As String) As Boolean
Dim i As Integer
On Error Resume Next
i = Len(Dir$(Filename))
If Err Or i = 0 Then FileExists = False Else FileExists = True
End Function

Private Function IsOpen(Filename As String) As Boolean
Dim fFile As Integer
Dim msg As String
fFile = FreeFile()
On Error GoTo ErrOpen
Open Filename For Binary Lock Read Write As fFile
Close fFile
Exit Function
ErrOpen:
If Err.Number <> 70 Then
msg = "Error # " & Str(Err.Number) & " was generated by " _
& Err.Source & Chr(13) & Err.Description
Else
IsOpen = True
End If
End Function

Public Sub Exec1(ByVal strCmd As String)
On Error GoTo errhandle:
Dim myTimer As Integer
myTimer = 0

Dim strOut As String
Dim strFname As String
//生成一个临时文件
If Len(App.Path) = 3 Then
strFname = App.Path & "lhtmp.txt"
Else
strFname = App.Path & "\lhtmp.txt"
End If
//如果在运行前文件已存在则删除之
If FileExists(strFname) Then
Kill strFname
End If

//运行行用户的CMD命令,并将结果输出到临时文件中
//注意cmd.exe的/c参数是指运行完一个命令后马上结束会话状态。等同于在windows的run中输入的CMD命令。
Dim strPara As String
strPara = "/c " & strCmd & ">" & strFname
ShellEx "cmd.exe", strPara
//等待生成输出文件
Do While Not FileExists(strFname)
Sleep 1000
DoEvents
myTimer = myTimer + 1
If myTimer = 15 Then
Exit Do
End If
Loop
myTimer = 0
//等待文件输出完毕
Do While IsOpen(strFname)
Sleep 1000
DoEvents
myTimer = myTimer + 1
If myTimer = 15 Then
Exit Do
End If
Loop

//显示输出文件的内容
Open strFname For Input As #1
Do While Not EOF(1)
Line Input #1, strOut
rp.Write strOut & vbCrLf
Loop
Close #1
Sleep 1000
//删除临时文件
Kill strFname
Exit Sub
errhandle:
rp.Write "error occured:" & Err.Description
End Sub

生成ASPCMD.dll,使用regsvr32 aspcmd.dll注册组件。

以下是调用该DLL的一个ASP程序例子:

<%@LANGUAGE="VBSCRIPT"%>
<style type=&quo

时间: 2024-11-02 15:49:33

用VB编写一个可以在ASP环境下调用的运行CMD命令的组件的相关文章

ASP环境下邮件列表功能的实现 (一)

邮件列表(Mailing List)是当前最受欢迎的网络服务之一.本文通过一个示例系统的建设,介绍在ASP环境下邮件列表功能的实现方法. ChinaByte网络学院的<Java Mail API及其应用>一文介绍了在Java中简单邮件列表服务功能的实现方法,本文介绍的是类似功能在ASP应用中的实现.我们将通过一个示例系统具体说明其实现过程. 一.系统概貌 整个应用系统可以分为两个部分,即面向最终用户的功能和面向管理任务的功能.面向最终用户的功能主要包括:提供输入界面让用户输入个人信息(用户名字

ASP环境下邮件列表功能的实现 (一)(推荐)

邮件列表 邮件列表(Mailing List)是当前最受欢迎的网络服务之一.本文通过一个示例系统的建设,介绍在ASP环境下邮件列表功能的实现方法. ChinaByte网络学院的<Java Mail API及其应用>一文介绍了在Java中简单邮件列表服务功能的实现方法,本文介绍的是类似功能在ASP应用中的实现.我们将通过一个示例系统具体说明其实现过程. 一.系统概貌 整个应用系统可以分为两个部分,即面向最终用户的功能和面向管理任务的功能.面向最终用户的功能主要包括:提供输入界面让用户输入个人信息

如何在ASP环境下利用SOAP来调用C#开发的Web Services

services|web 如何在ASP环境下利用SOAP来调用C#开发的Web Services,作为.NET Web Services的斑竹,很多朋友都问我如何在其他环境下调用Web Services,原理其实很简单,大家都知道Web Services是基于SOAP协议通信的,在其他环境下自然可以利用SOAP来访问Web Services了.下面我就一个具体的例子来说明调用过程.开发环境:windows 2000          SOAP Tookit3.0          IIS 我用C

web service-AXIS1环境下调用AXIS2服务端问题

问题描述 AXIS1环境下调用AXIS2服务端问题 我的项目现在是用的AXIS1的环境但是想调用AXIS2的服务端.我用的RPC的方式.每次调用都会报出org.apache.axis2.AxisFault: String index out of range: -12的错误.在纯AXIS2的环境下是可以的.我的代码如下 import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.ax

在Win7环境下perforce如何运行 python脚本

问题描述 在Win7环境下perforce如何运行 python脚本 我运行后总是显示这样的错误 : c:/python28/python: can't open file 'mail.py': [Errno 2] No such file or directory 解决方案 用绝对路径,看上去是py文件路径不对

jar-weblogic环境下调用接口报错,急,在线等!org.w3c.dom.Node.setUserData

问题描述 weblogic环境下调用接口报错,急,在线等!org.w3c.dom.Node.setUserData 之前在测试环境中测试是可以的,后来部署到正式环境就挂掉了,tomcat下也是正常的.项目的weblogic.xml也配置了优先加载项目的jar包,还是不行. ava.lang.LinkageError: loader constraint violation: when resolving interface method "org.w3c.dom.Node.setUserData

用VB编写ActiveX DLL实现ASP编程

ASP是目前一种广为应用的用来快速构建动态WEB站点的编程语言,默认的内置开发语言是VBScript,由于ASP和微软Windows系列操作系统的结合非常的好,使得ASP已经成为了NT开发平台上面进行WEB开发的首选语言和环境.他有着简单易学,方便快速开发的种种优点,但是他也有着致命的弱点,就是他是脚本语言解释执行的,速度会受到一定的影响,更为关键的是,使用ASP来开发完成一个项目之后,整个项目在交付客户使用的时候,是会连带所有的ASP脚本源代码的,也就无法将商业程序保密了,源代码泄漏会给自己造

在Apache环境下成功的运行ASP.NET的注意事项_实用技巧

由于公司的产品在新的版本中,需要考虑一些新的部署方式,所以又抽空关注了一下.NET跨平台的一些解决方案.虽然Mono Project对基于.NET开发的人来说都不陌生,不过由于Mono是比较狭义的跨平台(因为它是OS级别的)概念.而从广义的角度来说,使用不同的Web Server也可以算是一种垮平台.     缘起是由于IIS的口碑实在太滥,以至于不少的关键应用场景明文禁止安装和使用IIS.而从ASP.NET的执行原理来看,它是通过一个Web Server处理tcp请求,然后把对ASPX执行和呈

XML 在 ASP 环境下的应用

XML被誉为未来Web的生命所在.本文介绍如何在服务器端利用新的XML文档对象模型(DOM),通过ASP程序解析和应用XML数据.一.文档对象模型在服务器上解析和应用XML的能力为开发者打开了一个全新的世界.随着XML应用的日益广泛,在服务器上处理XML也变得更加重要.本文示范ASP应用在服务器端的XML文档处理过程,使用的XML例子是一个新闻文档.我们将介绍如何编写一个显示新闻文档日期和新闻数量的简单ASP页面,以及如何在ASP页面中显示新闻标题和相应的URL.文档对象模型即Document