VBS/WSH/JS - Мониторинг VPN и прописывание маршрута

Ответить
Аватара пользователя
Tonny_Bennet

VBS/WSH/JS - Мониторинг VPN и прописывание маршрута

Сообщение Tonny_Bennet »

Здравствуйте.

У меня есть VPN сервер, к которому подключается человек из другого офиса. Для правильной настройки подключения со стороны офиса мне пришлось прибегнуть к возможностям VBS.



В этой теме
[решено] Маршрутизация в VPN тоннеле
я описал свою проблему и сам же решил её написанием скрипта, который анализирует ответы компа из командной строки.



Принцип работы таков:

1. Подключается VPN соединение

2. Смотрится номер виртуального интерфейса

3. Прописывается маршрут в удалённую сеть с учётом номера

+всё логируется



Решение может и "детское" но работает до сих пор. Есть небольшая проблемка. При обрыве VPN соединения - оно поднимается само (пара галочек в настройках), а вот роуты не поднимаются. Приходится звонить в офис и просить перезапустить скрипт. Скажите как можно модифицировать скрипт чтобы он мониторил соединение и если нужно поднимал его и прописывал роуты? Может стОит переделать и его основную часть (анализ строк)?
Аватара пользователя
deepred

Re: VBS/WSH/JS - Мониторинг VPN и прописывание маршрута

Сообщение deepred »

Tonny_Bennet,



Скрипт очень неплохой и срочная модернизация ему не требуется, а для

мониторинга подключения можно использовать такой способ:






Код:

Код: Выделить всё

Set WshShell = CreateObject("WScript.Shell")
       Do 
       RetCode   =  WshShell.Run("ping -n 1 ", 0, True)
       ChEnable  =  true
           If RetCode = 1 Then
              Call AddRouteFunction("str")
           End if
       Wscript.Sleep 600000 ' Задержка на проверку соединения
       Loop While ChEnable
Function AddRouteFunction(str)
     -
     - основное тело твоего скрипта
     -
End Function 
WScript.Quit (1)

Нечто подобное, но с ручным запуском есть здесь vbscript:
CMD/BAT - [решено] Bat файл мониторинга подключения




[/i]
Аватара пользователя
Tonny_Bennet

Re: VBS/WSH/JS - Мониторинг VPN и прописывание маршрута

Сообщение Tonny_Bennet »

Спасибо. Я читал указанную тему. Думаю что в понедельник сяжду и можернизирую скрипт. О результатах отпишусь.
Аватара пользователя
Tonny_Bennet

Re: VBS/WSH/JS - Мониторинг VPN и прописывание маршрута

Сообщение Tonny_Bennet »

чуть переставил строчки и получилось вот это:





Код:

Код: Выделить всё

Set WshShell = CreateObject("WScript.Shell")
Set FSO=CreateObject("Scripting.FileSystemObject")
Dim Log
Set Log=FSO.OpenTextFile("C:\vpn_connect_logs.txt",8,true)
Log.WriteLine(Now()&" Запуск скрипта")
'WScript.Sleep 40000 'пауза 40 секунд
Call AddRouteFunction("str")
       Do 
       RetCode   =  WshShell.Run("ping -n 1 192.168.0.111", 0, True)
       ChEnable  =  true
           If RetCode = 1 Then
			Log.WriteLine(Now()&" Обрыв соединения")
			Call AddRouteFunction("str")
           End if
       Wscript.Sleep 10000 'Задержка на проверку соединения 10 секунд
       Loop While ChEnable
Function AddRouteFunction(str)
Dim StringArray(15) 
'параметры подключения
sNameOfConnection = "VPN"
sUser = "Username"
sPassword = "Password"
sNameOfInt="WAN (PPP/SLIP) Interface" 'имя интерфейса
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("rasdial "&sNameOfConnection&" "&sUser&" "&sPassword) 'подключаем соединение
Log.WriteLine(Now()&" Подключение rasdial "&sNameOfConnection&" "&sUser&" "&sPassword)
WScript.Sleep 3000
Set WshExec = WshShell.Exec("route print")' смотрим route print
Set TextStream = WshExec.StdOut
Str = vbNullString
Trim(TextStream.ReadLine()) 'просто читаю первую строку она мне дальше не нужна
Trim(TextStream.ReadLine()) 'просто читаю вторую строку она мне дальше не нужна
n=0
Log.WriteLine(Now()&" Доступные сетевые интерфейсы:")
Do While Not TextStream.AtEndOfStream
	stemp = Trim(TextStream.ReadLine())' последовательно читаем строки
		if (stemp  "===========================================================================") then 
			n=n+1
			StringArray(n)=stemp 
			Log.WriteLine(Now()&" "&stemp)
		else 
			Exit Do
		End If
Loop
sNumOfInt=""
For i=1 to 15 'просматриваю все строки и ищу нужный мне сетевой адаптер
	if (InStrRev(StringArray(i),sNameOfInt)0) then 
	'MsgBox sNameOfInt & " в "&i&" строке" 
	sNumOfInt = Left(StringArray(i),InStr(StringArray(i)," "))' получаю номер сетевого интерфейса
	End if
Next
Erase StringArray
if (sNumOfInt"") then
	Set WshExec = WshShell.Exec("route add 192.168.0.0 mask 255.255.255.0 192.168.2.1 metric 1 if "&sNumOfInt)
	Log.WriteLine(Now()&" Добавлен маршрут route add 192.168.0.0 mask 255.255.255.0 192.168.2.1 metric 1 if "&sNumOfInt)
else
MsgBox "Маршрут не добавлен. Возможно не удалось создать подключение",vbInformation + vbOK, "Внимание!"
'Log.WriteLine(Now()&" Маршрут не добавлен route add 192.168.0.0 mask 255.255.255.0 192.168.2.1 metric 1 if "&sNumOfInt)	
End if
Log.WriteLine(Now()&" Работа скрипта завершена")
Log.WriteLine()
End Function
Log.Close
WScript.Quit (1)

Вроде работает. Вечерком отправлю коллеге в дркгой офис и будем тестироватьИзображение



Вот только мне интересно нормально ли то, что этот скрипт кушает порядка 11 МБ оперативной памяти?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»