Friday, January 22, 2010

ASP JScript for restarting IIS

<script language="JScript" runat="server">
  var fullPath = "IIS://localhost/W3svc/1",
  oServer = GetObject(fullPath);
  Response.write("Restarting web server in progress.
"); Response.write(" Please connect later!"); oServer.Stop(); oServer.Start(); }catch(e){ Response.write("Can't stop web server"); } </script>

ASP JScript for Reboot a computer

<script language="JScript" runat="server">
var objWMIService=GetObject(
var colItems=objWMIService.ExecQuery(
  "Select * from Win32_OperatingSystem"
var items = new Enumerator(colItems);
while (!items.atEnd()){

Monday, August 31, 2009

How do I write an ActiveX Ping Object?

I provide the source code first, and I will explain it later:


Begin VB.UserControl PingObj 
   ClientHeight    =   3600
   ClientLeft      =   0
   ClientTop       =   0
   ClientWidth     =   4800
   InvisibleAtRuntime=   -1  'True
   ScaleHeight     =   3600
   ScaleWidth      =   4800
   Windowless      =   -1  'True
Attribute VB_Name = "PingObj"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Private Const IP_SUCCESS As Long = 0
Private Const IP_STATUS_BASE As Long = 11000
Private Const IP_BUF_TOO_SMALL As Long = (11000 + 1)
Private Const IP_DEST_NET_UNREACHABLE As Long = (11000 + 2)
Private Const IP_DEST_HOST_UNREACHABLE As Long = (11000 + 3)
Private Const IP_DEST_PROT_UNREACHABLE As Long = (11000 + 4)
Private Const IP_DEST_PORT_UNREACHABLE As Long = (11000 + 5)
Private Const IP_NO_RESOURCES As Long = (11000 + 6)
Private Const IP_BAD_OPTION As Long = (11000 + 7)
Private Const IP_HW_ERROR As Long = (11000 + 8)
Private Const IP_PACKET_TOO_BIG As Long = (11000 + 9)
Private Const IP_REQ_TIMED_OUT As Long = (11000 + 10)
Private Const IP_BAD_REQ As Long = (11000 + 11)
Private Const IP_BAD_ROUTE As Long = (11000 + 12)
Private Const IP_TTL_EXPIRED_TRANSIT As Long = (11000 + 13)
Private Const IP_TTL_EXPIRED_REASSEM As Long = (11000 + 14)
Private Const IP_PARAM_PROBLEM As Long = (11000 + 15)
Private Const IP_SOURCE_QUENCH As Long = (11000 + 16)
Private Const IP_OPTION_TOO_BIG As Long = (11000 + 17)
Private Const IP_BAD_DESTINATION As Long = (11000 + 18)
Private Const IP_ADDR_DELETED As Long = (11000 + 19)
Private Const IP_SPEC_MTU_CHANGE As Long = (11000 + 20)
Private Const IP_MTU_CHANGE As Long = (11000 + 21)
Private Const IP_UNLOAD As Long = (11000 + 22)
Private Const IP_ADDR_ADDED As Long = (11000 + 23)
Private Const IP_GENERAL_FAILURE As Long = (11000 + 50)
Private Const MAX_IP_STATUS As Long = (11000 + 50)
Private Const IP_PENDING As Long = (11000 + 255)
Private Const PING_TIMEOUT As Long = 500
Private Const WS_VERSION_REQD As Long = &H101
Private Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Const INADDR_NONE As Long = &HFFFFFFFF
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128

    Ttl             As Byte
    Tos             As Byte
    Flags           As Byte
    OptionsSize     As Byte
    OptionsData     As Long
End Type

    Address         As Long
    Status          As Long
    RoundTripTime   As Long
    DataSize        As Long 'formerly integer
   'Reserved        As Integer
    DataPointer     As Long
    Options         As ICMP_OPTIONS
    Data            As String * 250
End Type

Private Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To MAX_WSADescription) As Byte
   szSystemStatus(0 To MAX_WSASYSStatus) As Byte
   wMaxSockets As Long
   wMaxUDPDG As Long
   dwVendorInfo As Long
End Type

Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long

Private Declare Function IcmpCloseHandle Lib "icmp.dll" _
   (ByVal IcmpHandle As Long) As Long
Private Declare Function IcmpSendEcho Lib "icmp.dll" _
   (ByVal IcmpHandle As Long, _
    ByVal DestinationAddress As Long, _
    ByVal RequestData As String, _
    ByVal RequestSize As Long, _
    ByVal RequestOptions As Long, _
    ReplyBuffer As ICMP_ECHO_REPLY, _
    ByVal ReplySize As Long, _
    ByVal Timeout As Long) As Long
Private Declare Function WSAGetLastError Lib "wsock32" () As Long

Private Declare Function WSAStartup Lib "wsock32" _
   (ByVal wVersionRequired As Long, _
Private Declare Function WSACleanup Lib "wsock32" () As Long

Private Declare Function gethostname Lib "wsock32" _
   (ByVal szHost As String, _
    ByVal dwHostLen As Long) As Long
Private Declare Function gethostbyname Lib "wsock32" _
   (ByVal szHost As String) As Long

Private Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (xDest As Any, _
   xSource As Any, _
   ByVal nbytes As Long)
Private Declare Function inet_addr Lib "wsock32" _
   (ByVal s As String) As Long
Dim StatusCode As String
Dim Address As String
Dim RTT As Long
Dim Size As Long
Dim ReceiveData As String
Dim Pointer As Long

Public Function Ping(IPAddress, Content)
   Dim pos As Long
   Dim success As Long
   If SocketsInitialize() Then
     'ping the IP by passing the address,
     'text to send, and the ECHO structure.
      success = Pinging((IPAddress), (Content), ECHO)
     'display the results
      StatusCode = GetStatusCode(success)
      Address = "" & ECHO.Address
      RTT = ECHO.RoundTripTime
      Size = ECHO.DataSize
      If Left$(ECHO.Data, 1) <> Chr$(0) Then
         pos = InStr(ECHO.Data, Chr$(0))
         ReceiveData = Left$(ECHO.Data, pos - 1)
      End If
      Pointer = ECHO.DataPointer
   End If
   Ping = StatusCode
End Function

Public Function GetStatusCode(Status As Long) As String

   Dim msg As String
   Select Case Status
      Case IP_SUCCESS:               msg = "ip success"
      Case INADDR_NONE:              msg = "inet_addr: bad IP format"
      Case IP_BUF_TOO_SMALL:         msg = "ip buf too_small"
      Case IP_DEST_NET_UNREACHABLE:  msg = "ip dest net unreachable"
      Case IP_DEST_HOST_UNREACHABLE: msg = "ip dest host unreachable"
      Case IP_DEST_PROT_UNREACHABLE: msg = "ip dest prot unreachable"
      Case IP_DEST_PORT_UNREACHABLE: msg = "ip dest port unreachable"
      Case IP_NO_RESOURCES:          msg = "ip no resources"
      Case IP_BAD_OPTION:            msg = "ip bad option"
      Case IP_HW_ERROR:              msg = "ip hw_error"
      Case IP_PACKET_TOO_BIG:        msg = "ip packet too_big"
      Case IP_REQ_TIMED_OUT:         msg = "ip req timed out"
      Case IP_BAD_REQ:               msg = "ip bad req"
      Case IP_BAD_ROUTE:             msg = "ip bad route"
      Case IP_TTL_EXPIRED_TRANSIT:   msg = "ip ttl expired transit"
      Case IP_TTL_EXPIRED_REASSEM:   msg = "ip ttl expired reassem"
      Case IP_PARAM_PROBLEM:         msg = "ip param_problem"
      Case IP_SOURCE_QUENCH:         msg = "ip source quench"
      Case IP_OPTION_TOO_BIG:        msg = "ip option too_big"
      Case IP_BAD_DESTINATION:       msg = "ip bad destination"
      Case IP_ADDR_DELETED:          msg = "ip addr deleted"
      Case IP_SPEC_MTU_CHANGE:       msg = "ip spec mtu change"
      Case IP_MTU_CHANGE:            msg = "ip mtu_change"
      Case IP_UNLOAD:                msg = "ip unload"
      Case IP_ADDR_ADDED:            msg = "ip addr added"
      Case IP_GENERAL_FAILURE:       msg = "ip general failure"
      Case IP_PENDING:               msg = "ip pending"
      Case PING_TIMEOUT:             msg = "ping timeout"
      Case Else:                     msg = "unknown  msg returned"
   End Select
   GetStatusCode = CStr(Status) & "   [ " & msg & " ]"
End Function

Private Function Pinging(sAddress As String, _
                     sDataToSend As String, _
                     ECHO As ICMP_ECHO_REPLY) As Long

  'If Ping succeeds :
  '.RoundTripTime = time in ms for the ping to complete,
  '.Data is the data returned (NULL terminated)
  '.Address is the Ip address that actually replied
  '.DataSize is the size of the string in .Data
  '.Status will be 0
  'If Ping fails .Status will be the error code
   Dim hPort As Long
   Dim dwAddress As Long
  'convert the address into a long representation
   dwAddress = inet_addr(sAddress)
  'if a valid address..
   If dwAddress <> INADDR_NONE Then
     'open a port
      hPort = IcmpCreateFile()
     'and if successful,
      If hPort Then
        'ping it.
         Call IcmpSendEcho(hPort, _
                           dwAddress, _
                           sDataToSend, _
                           Len(sDataToSend), _
                           0, _
                           ECHO, _
                           Len(ECHO), _

        'return the status as ping succes and close
         Pinging = ECHO.Status
         Call IcmpCloseHandle(hPort)
      End If
        'the address format was probably invalid
         Pinging = INADDR_NONE
   End If
End Function

Private Sub SocketsCleanup()
   If WSACleanup() <> 0 Then
       MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation
   End If
End Sub

Private Function SocketsInitialize() As Boolean

   SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function

How do I check the disk space of a remote computer within my domain?

Hey, Programming Guy! How do I check the disk space of a remote computer within my domain?
- Leonardo


Leonardo, you can use the WMIService's Win32_LogicalDisk. Say, if you want to check the size of the c:, you can use the following query:

Select * from Win32_LogicalDisk Where DeviceID = 'C:'

Thus, if you want to check the drive c's diskspace remotely, the following code should be convenient for you:

    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objWbemLocator.ConnectServer(strComputer, "root\cimv2",strUser,strPass)
    Set colOSName = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
    For Each objItem in colOSName
      WScript.Echo strComputer & ": " & objItem.Caption

Or, you can wrap everything together to become a command. Save the following code into a file with filename: disspace.wsf:
<?xml version="1.0"?>
<script language="vbscript">
  syntax = false
  If WScript.arguments.count = 3 Then
    strComputer = WScript.arguments(0)
    strUser = WScript.arguments(1)
    strPass = WScript.arguments(2)
    syntax = True
  ElseIf WScript.arguments.count = 1 Then
    strComputer = WScript.arguments(0)
    WScript.StdOut.write "User name:"
    strUser = WScript.StdIn.ReadLine
    WScript.StdOut.write "Password:"
    strPass = WScript.StdIn.ReadLine
    syntax = True
  ElseIf WScript.arguments.count = 0 Then
    WScript.StdOut.Write "Computer Name or IP:"
    strComputer = WScript.StdIn.ReadLine
    WScript.StdOut.write "User name:"
    strUser = WScript.StdIn.ReadLine
    WScript.StdOut.write "Password:"
    strPass = WScript.StdIn.ReadLine
    syntax = True
  End If
  If syntax Then
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objWbemLocator.ConnectServer(strComputer, "root\cimv2",strUser,strPass)
    Set colOSName = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
    For Each objItem in colOSName
      WScript.Echo strComputer & ": " & objItem.Caption
    WScript.Echo "diskspace.wsf [ip] [user] [password]"
  End If

Tuesday, July 14, 2009

How can I ping an ip address remotely by ASP

Hey, Programming Guy! How can I ping an ip address remotely by ASP from an IIS server?
- Jennifer


Hi, Jennifer, we can use WScript.Shell to run a shell command to achieve this. Suppose the IIS have the access right for ping.exe which is located at system32 path inside windows. You can use the following VBScript by setting the id as a parameter to the destinated computer:

url = Trim(Request("ip"))
if url<>"" Then
Set objWShell = CreateObject("WScript.Shell")
Set objCmd = objWShell.Exec("ping " & url)
strPResult = objCmd.StdOut.Readall()
set objCmd = nothing: Set objWShell = nothing

strStatus = "offline"
if InStr(strPResult,"TTL=")>0 then strStatus = "online"

response.write strStatus
End If

Latest Resources

Other Resources

  1. Cloudgen PBWorks

  2. Cloudgen Demonstration Center I

  3. Cloudgen twitter

  4. Cloudgen spaces

  5. Cloudgen programming blog: Hey,Programming Guy

  6. Cloudgen Javascript Laboratory

  7. Cloudgen Javascript Laboratory (Chinese Version)

  8. Cloudgen Facebook

  9. Cloudgen byteMyCode

  10. Cloudgen Google site

  11. My opera, Cloudgen current project

  12. Fans of Classic ASP (FOCA) by Cloudgen

Latest Blog Articles from Cloudgen Javascript Laboratory

Latest Blog Articles from Cloudgen spaces

Wednesday, July 1, 2009

How can I write a VB 6.0 program showing icons in Systray?

Hey, Programming Guy! How can I write a program showing an icon in system tray automatically involve the notepad.exe to open a file, sending keys to close the notepad and check if any virus such as W32.virut.CF has modified an html file?
- K.O.

Option Explicit
Dim Counter
' Type passed to Shell_NotifyIcon
Private Type NotifyIconData
Size As Long
Handle As Long
ID As Long
Flags As Long
CallBackMessage As Long
Icon As Long
Tip As String * 64
End Type

' Constants for managing System Tray tasks, foudn in shellapi.h
Private Const AddIcon = &H0
Private Const ModifyIcon = &H1
Private Const DeleteIcon = &H2

Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202

Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205

Private Const MessageFlag = &H1
Private Const IconFlag = &H2
Private Const TipFlag = &H4

Private Declare Function Shell_NotifyIcon _
Lib "shell32" Alias "Shell_NotifyIconA" ( _
ByVal Message As Long, Data As NotifyIconData) As Boolean

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Long) As Long

Const WM_CLOSE = &H10
Private Data As NotifyIconData

Private Sub Form_Load()

If App.PrevInstance Then
MsgBox "The checking has been started alreay.", vbCritical
End If
Counter = 10
Visible = False
End Sub

Private Sub Form_Terminate()
End Sub

Private Sub AddIconToTray()

Data.Size = Len(Data)
Data.Handle = hwnd
Data.ID = vbNull
Data.Flags = IconFlag Or TipFlag Or MessageFlag
Data.CallBackMessage = WM_MOUSEMOVE
Data.Icon = Icon
Data.Tip = "Checking Files" & vbNullChar
Call Shell_NotifyIcon(AddIcon, Data)

End Sub

Private Sub DeleteIconFromTray()
Call Shell_NotifyIcon(DeleteIcon, Data)
End Sub

Private Sub Form_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)

Dim Message As Long
Message = X / Screen.TwipsPerPixelX

Select Case Message
Visible = Not Visible
WindowState = Abs(Not Visible)
End Select
End Sub

Private Sub Timer1_Timer()
Dim UIHandle As Long
Dim tmp As String, content As String
Dim n As Integer
Counter = Counter - 1
If Counter = 0 Then
Timer1.Interval = 60000
Counter = 10
Shell "Notepad.exe c:\test.html", vbNormalFocus

UIHandle = FindWindow(vbNullString, "test.html - Notepad")
PostMessage UIHandle, WM_CLOSE, 0&, 0&
content = ""

n = FreeFile
Open "C:\test.html" For Input As #n
Do While Not EOF(1)
Line Input #n, tmp
content = content & tmp
Close #n
If InStr(1, content, "<" & "iframe") > 0 Then MsgBox "Virus found! Please contact IT Staff!", vbCritical, "Virus Checker"
End If
End Sub