Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Мониторинг VPN и прописывание маршрута (http://forum.oszone.net/showthread.php?t=180751)

Tonny_Bennet 16-07-2010 18:22 1454650

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

В этой теме http://forum.oszone.net/thread-176097.html я описал свою проблему и сам же решил её написанием скрипта, который анализирует ответы компа из командной строки.

Принцип работы таков:
1. Подключается VPN соединение
2. Смотрится номер виртуального интерфейса
3. Прописывается маршрут в удалённую сеть с учётом номера
+всё логируется

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

deepred 16-07-2010 19:32 1454679

Tonny_Bennet,

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


Код:

Set WshShell = CreateObject("WScript.Shell")
      Do
      RetCode  =  WshShell.Run("ping -n 1 <<узел доступный по vpn>>", 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: Bat файл мониторинга подключения


Tonny_Bennet 17-07-2010 23:49 1455270

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

Tonny_Bennet 19-07-2010 10:07 1455912

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

Код:

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 МБ оперативной памяти?


Время: 11:56.

Время: 11:56.
© OSzone.net 2001-