Страница 1 из 1

Мониторинг доступности нескольких сетевых ресурсов (хостов)

СообщениеДобавлено: 06 июня 2021, 12:08
DmitryS


ПРИМЕР ОДНОВРЕМЕННОГО МОНИТОРИНГА НЕСКОЛЬКИХ СЕТЕВЫХ РЕСУРСОВ:

Задача: Организовать запуск и обеспечить работу нескольких копий программы IPAMon в на одном компьютере в одной операционной системе, для одновременного опроса доступности / недоступности нескольких сетевых ресурсов (хостов, узлов), расположенных в локальной вычислительной сети, сети Интернет, а также иных физических, виртуальных и т.п. вычислительных сетях, имеющих IPv4-адреса.

Описание: Создание, запуск, остановка и удаление копий программы IPAMon осуществляется тремя раздельными VBS-скриптами, которые при необходимости могут быть сконвертированы в иные скрипты, например в JS, либо в пакетные файлы BAT / CMD / PowerShell и т.п.



Установка:

01. Скачиваем на компьютер программу IPAMon.zip (или отсюда: IPAMon).

02. Устанавливаем программу в папку: "C:\Program Files\VRCP Soft\IPAMon\".

03. Скачиваем на компьютер необходимые VBS-скрипты - VBS-IPAM.zip.

04. Распаковываем три VBS-скрипта в папку: "C:\Program Files\VRCP Soft\".

05. Скачиваем на компьютер утилиту IsKillPs - iskillps.zip (или отсюда: IsKillPs).

06. Распаковываем файл iskillps.exe в папку: "C:\Program Files\VRCP Soft\".

07. Создаём в папке: "C:\Program Files\VRCP Soft\" текстовый файл IP.txt.



Запуск:

08. Прописываем в файле IP.txt IP-адреса хостов (каждый адрес в новой строчке).

09. Запускаем VBS-скрипт START.vbs из папки: "C:\Program Files\VRCP Soft\".

 Код скрипта START.vbs:
'----------------------------------------------------------------
' Initialization
'----------------------------------------------------------------
Option Explicit
On Error Resume Next
Dim WSHShell, objFile, txtFile, cfgFile
Dim myPath, myList, myProg, strFile, qss, qll, qtt, qzz
Dim qnn, qmm, qok, qxx
Set WSHShell = WScript.CreateObject("WScript.Shell")
'
myPath = "C:\Program Files\VRCP Soft\"
myList = "IP.txt"
myProg = "IPAMon"
strFile = ""
cfgFile = ""
qss = ""
qll = ""
qtt = ""
qzz = ""
qnn = 0
qmm = 0
qok = 0
qxx = 0
'----------------------------------------------------------------

'----------------------------------------------------------------
' Making Copies
'----------------------------------------------------------------
Err.Clear
Set objFile = CreateObject("Scripting.FileSystemObject")
If objFile.FileExists(myList) Then
Set txtFile = objFile.OpenTextFile(myList, 1, False)
If Err.Number = 0 Then
Do While txtFile.AtEndOfStream <> True
strFile = txtFile.ReadLine
strFile = Trim(CStr(strFile))
If Len(strFile) > 0 Then
If strFile Like "?*.?*.?*.?*" Then
qok = 0
For qnn = 1 To Len(strFile)
If Not (Mid(strFile, qnn, 1) = "." Or _
(Mid(strFile, qnn, 1) >= "0" And Mid(strFile, qnn, 1) <= "9")) _
Then qok = 1: Exit For
Next
qmm = 0
For qnn = 1 To Len(strFile)
If Mid(strFile, qnn, 1) = "." Then qmm = qmm + 1
Next
If qok = 0 And qmm = 3 Then
qss = ""
qmm = 1
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm <= Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn < 1 Or qnn > Len(strFile) Then qnn = Len(strFile) + 1
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll)))
If Len(qss) > 0 Then
If qss Like "?*.?*.?*.?*" Then
Err.Clear
objFile.CreateFolder myPath & qss
If Err.Number = 0 Then
'
'objFile.CopyFile myPath & myProg & "\*.*", myPath & qss & "\", 0
qok = WSHShell.Run("cmd.exe /c copy /y " & _
"""" & myPath & myProg & "\*.*" & """" & " " & _
"""" & myPath & qss & "\*.*" & """", 0, True)
WScript.Sleep 125
'
Err.Clear
If objFile.FileExists(myPath & qss & "\" & "cfgs.res") Then
Set cfgFile = objFile.OpenTextFile(myPath & qss & "\" & "cfgs.res", 1, False)
If Err.Number = 0 Then
qxx = 0
qzz = ""
Do While cfgFile.AtEndOfStream <> True
qtt = cfgFile.ReadLine
qtt = Trim(CStr(qtt))
If qxx = 0 Then
qzz = qzz & qss & chr(13) & chr(10)
Else
qzz = qzz & qtt & chr(13) & chr(10)
End If
qxx = qxx + 1
Loop
cfgFile.Close
Set cfgFile = objFile.OpenTextFile(myPath & qss & "\" & "cfgs.res", 2, False)
If Err.Number = 0 Then
cfgFile.Write qzz
cfgFile.Close
End If
Set cfgFile = Nothing
End If
End If
'
objFile.MoveFile myPath & qss & "\" & myProg & ".exe", myPath & qss & "\" & qss & ".exe"
'
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End if
End If
End If
End If
Loop
End If
txtFile.Close
Set txtFile = Nothing
End If
Set objFile = Nothing
WScript.Sleep 1000
'----------------------------------------------------------------

'----------------------------------------------------------------
' Run Copies
'----------------------------------------------------------------
Err.Clear
Set objFile = CreateObject("Scripting.FileSystemObject")
If objFile.FileExists(myList) Then
Set txtFile = objFile.OpenTextFile(myList, 1, False)
If Err.Number = 0 Then
Do While txtFile.AtEndOfStream <> True
strFile = txtFile.ReadLine
strFile = Trim(CStr(strFile))
If Len(strFile) > 0 Then
If strFile Like "?*.?*.?*.?*" Then
qok = 0
For qnn = 1 To Len(strFile)
If Not (Mid(strFile, qnn, 1) = "." Or _
(Mid(strFile, qnn, 1) >= "0" And Mid(strFile, qnn, 1) <= "9")) _
Then qok = 1: Exit For
Next
qmm = 0
For qnn = 1 To Len(strFile)
If Mid(strFile, qnn, 1) = "." Then qmm = qmm + 1
Next
If qok = 0 And qmm = 3 Then
qss = ""
qmm = 1
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm <= Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn < 1 Or qnn > Len(strFile) Then qnn = Len(strFile) + 1
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll)))
If Len(qss) > 0 Then
If qss Like "?*.?*.?*.?*" Then
Err.Clear
'
'WSHShell.Run """" & myPath & qss & "\" & qss & ".exe" & """"
WSHShell.Run """" & _
myPath & qss & "\" & qss & ".exe " & _
"""" & "hide"
WScript.Sleep 125
'
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Loop
End If
End If
'----------------------------------------------------------------

'----------------------------------------------------------------
' Completion
'----------------------------------------------------------------
Set WSHShell = Nothing
Err.Clear
WScript.Quit 0
'----------------------------------------------------------------


После запуска скрипта, в папке "C:\Program Files\VRCP Soft\" создаются папки с именами, соответствующими IP-адресам контролируемых хостов, прописанных в текстовом файле "IP.txt" (например "192.168.0.1", "10.12.3.45", "127.0.0.1" и т.д.). Каждая копия исполняемого файла "IPAMon.exe" в каждой созданной папке также будет переименована в соответствии с IP-адресом контролируемого хоста, например "192.168.0.1.exe", "10.12.3.45.exe", "127.0.0.1.exe" и т.д. После создания всех необходимых папок с копиями файлов программы IPAMon, а также переименования всех копий исполняемых файлов, поочерёдно запустятся все созданные копии исполняемых файлов из каждой созданной папки и каждая будет вести собственный отдельный лог-файл (если это не скорректировано иными настройками и правилами).

Настройки каждой копии программы впоследствии можно изменять исходя из собственных требований, автоматически изменяться они не будут (только при условии, что конкретная созданная папка не была удалена или переименована, в ином случае папка будет автоматически создана вновь с настройками, взятыми из основной папки программы IPAMon, с учётом корректировок вносимых скриптом, при очередном запуске этого скрипта).



Остановка:

10. Запускаем VBS-скрипт STOP.vbs из папки: "C:\Program Files\VRCP Soft\".

 Код скрипта STOP.vbs:
'----------------------------------------------------------------
' Initialization
'----------------------------------------------------------------
Option Explicit
On Error Resume Next
Dim WSHShell, objFile, txtFile
Dim myPath, myList, strFile, qss, qll
Dim qnn, qmm, qok
Set WSHShell = WScript.CreateObject("WScript.Shell")
'
myPath = "C:\Program Files\VRCP Soft\"
myList = "IP.txt"
strFile = ""
qss = ""
qll = ""
qnn = 0
qmm = 0
qok = 0
'----------------------------------------------------------------

'----------------------------------------------------------------
' Close Processes
'----------------------------------------------------------------
Err.Clear
Set objFile = CreateObject("Scripting.FileSystemObject")
If objFile.FileExists(myList) Then
Set txtFile = objFile.OpenTextFile(myList, 1, False)
If Err.Number = 0 Then
Do While txtFile.AtEndOfStream <> True
strFile = txtFile.ReadLine
strFile = Trim(CStr(strFile))
If Len(strFile) > 0 Then
If strFile Like "?*.?*.?*.?*" Then
qok = 0
For qnn = 1 To Len(strFile)
If Not (Mid(strFile, qnn, 1) = "." Or _
(Mid(strFile, qnn, 1) >= "0" And Mid(strFile, qnn, 1) <= "9")) _
Then qok = 1: Exit For
Next
qmm = 0
For qnn = 1 To Len(strFile)
If Mid(strFile, qnn, 1) = "." Then qmm = qmm + 1
Next
If qok = 0 And qmm = 3 Then
qss = ""
qmm = 1
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm <= Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn < 1 Or qnn > Len(strFile) Then qnn = Len(strFile) + 1
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll)))
If Len(qss) > 0 Then
If qss Like "?*.?*.?*.?*" Then
Err.Clear
'
WSHShell.Run """" & myPath & "iskillps.exe " & """" & qss & ".exe"
WScript.Sleep 125
'
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Loop
End If
End If
'----------------------------------------------------------------

'----------------------------------------------------------------
' Completion
'----------------------------------------------------------------
Set WSHShell = Nothing
Err.Clear
WScript.Quit 0
'----------------------------------------------------------------

11. Ожидаем некоторое время, пока все запущенные процессы будут выгружены из памяти.


После остановки всех экземпляров программы IPAMon, запущенных ранее в п.09, можно производить персональные настройки каждой копии программы исходя из собственных требований. Все созданные на этапе п.09 папки, а также содержащиеся в них файлы, корректироваться скриптом из п.09, при его очередном запуске, не будут. После внесения необходимых корректировок в конфигурационные файлы, вновь запустить мониторинг хостов можно скриптом из п.09.



Очистка:

12. Запускаем VBS-скрипт CLEAR.vbs из папки: "C:\Program Files\VRCP Soft\".

 Код скрипта CLEAR.vbs:
'----------------------------------------------------------------
' Initialization
'----------------------------------------------------------------
Option Explicit
On Error Resume Next
Dim WSHShell, objFile, txtFile
Dim myPath, myList, strFile, qss, qll
Dim qnn, qmm, qok
Set WSHShell = WScript.CreateObject("WScript.Shell")
'
myPath = "C:\Program Files\VRCP Soft\"
myList = "IP.txt"
strFile = ""
qss = ""
qll = ""
qnn = 0
qmm = 0
qok = 0
'----------------------------------------------------------------

'----------------------------------------------------------------
' Delete Copies
'----------------------------------------------------------------
Err.Clear
Set objFile = CreateObject("Scripting.FileSystemObject")
If objFile.FileExists(myList) Then
Set txtFile = objFile.OpenTextFile(myList, 1, False)
If Err.Number = 0 Then
Do While txtFile.AtEndOfStream <> True
strFile = txtFile.ReadLine
strFile = Trim(CStr(strFile))
If Len(strFile) > 0 Then
If strFile Like "?*.?*.?*.?*" Then
qok = 0
For qnn = 1 To Len(strFile)
If Not (Mid(strFile, qnn, 1) = "." Or _
(Mid(strFile, qnn, 1) >= "0" And Mid(strFile, qnn, 1) <= "9")) _
Then qok = 1: Exit For
Next
qmm = 0
For qnn = 1 To Len(strFile)
If Mid(strFile, qnn, 1) = "." Then qmm = qmm + 1
Next
If qok = 0 And qmm = 3 Then
qss = ""
qmm = 1
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm < Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn > 0 And qnn <= Len(strFile) Then
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll))) + "."
qmm = qnn + 1
If qmm <= Len(strFile) Then
qnn = 0
qnn = InStr(qmm, strFile, ".", vbBinaryCompare)
If qnn < 1 Or qnn > Len(strFile) Then qnn = Len(strFile) + 1
qll = Trim(Mid(strFile, qmm, qnn - qmm))
If Len(qll) > 0 And Int(qll) >= 0 And Int(qll) <= 255 Then
qss = qss + Trim(CStr(Int(qll)))
If Len(qss) > 0 Then
If qss Like "?*.?*.?*.?*" Then
Err.Clear
'
qok = WSHShell.Run("cmd.exe /c rd /q /s " & """" & qss & """", 0, True)
WScript.Sleep 125
'
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Loop
End If
End If
'----------------------------------------------------------------

'----------------------------------------------------------------
' Completion
'----------------------------------------------------------------
Set WSHShell = Nothing
Err.Clear
WScript.Quit 0
'----------------------------------------------------------------

13. Ожидаем некоторое время, пока все созданные ранее папки будут удалены с диска.


Указанный скрипт необходимо запускать ТОЛЬКО после завершения работы скрипта из п.10, т.е. после остановки и выгрузки из памяти всех запущенных скриптом из п.09 экземпляров программы IPAMon. Данный скрипт автоматизирует удаление только тех папок, имена которых соответствуют IP-адресам, прописанным в текстовом файле "IP.txt". Каждый раз запускать этот скрипт после завершения работы скрипта из п.10 совершенно нет необходимости, т.к. в этом случае теряются персональные настройки, внесённые вручную в конфигурационные файлы некоторых выбранных экземпляров программы.




P.S.: В данном примере, утилита iskillps.exe предназначена для экстренного закрытия каждого запускаемого VBS-скриптом процесса, являющегося копией исполняемого файла "IPAMon.exe", т.е. поочерёдного закрытия всех запущенных VBS-скриптом процессов, имеющих имена в виде IP-адресов контролируемых хостов (например "192.168.0.1.exe", "10.12.3.45.exe", "127.0.0.1.exe" и т.п.), прописанных в текстовом файле "IP.txt".