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

Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 17:38
Simpleuser
Проблема в следующем:
Есть удалённая машина, с которой общаюсь через TeamViewer или LogMeIn. Периодически пропадает сетка кратковременно (там) и потом винда почему-то нормально не восстанавливает коннект. Каждый раз звонить и просить юзверей перезагрузить машину напрягает (в основном их, да и не всегда они на месте). Резидентик-бы сваять, который периодически пингует кого нибудь и, при пропадании пинга, ребутает машину... Сам-то я не прогер, но, знаю, что это более чем реально.
Мелькало подобное, но, под никс. Мастдайного не попадалось...
Нашёл близкую по смыслу прогу, но, она ребутит только модем при отсутствии коннекта. А мне нужен ребут системы...

Помогите, а ? :oops: Если что - пиво... :roll:

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 18:02
kirill@KIA
мысли такие а что как удаленный хост будешь пинговать?
и GW на удаленной машине это местный роутер, или это уже у провайдера? :think:
я тут подумал что будет много ложных срабатываний. Обязательно надо ставить таймаут минут на 5. ну или к примеру 100 пингов... :think:

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 18:02
-=+DeMoN+=-
Может легче машинку вылечить удаленную? потому как пинг - штука крайне ненадежная и ребутить она тебе будет ее больше чем работать....

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 18:18
kirill@KIA
-=+DeMoN+=- писал(а):штука крайне ненадежная и ребутить она тебе будет ее больше чем работать.

ну примерно то же самое сказал, поэтому таймаут..если более 5 мин нет пинга - то ребутить, а то если 1 пинг пропал..то в ребут гнать машину..не айс.

там я как понял не в машине дело, а то что канал падает периодически:)

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 18:19
Melior
Ну вот быстренько сваял на VBS
CompName = "192.168.0.1"
do
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& CompName & "'")
For Each objStatus In objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each OpSys In OpSysSet
OpSys.Reboot()
Next
else
wscript.echo "РАБОТАЕТ"
end if
next
WScript.Sleep 1000
loop

Собственно в первой строчке пишешь IP удаленной машины.
В предпоследней WScript.Sleep 1000 указываешь паузу...сейчас 1 сек стоит.
Копируешь скрипт в блокнот и сохраняешь, например, c:\reboot.vbs
Далее в автозагрузку засовываешь команду (Выполнить - regedit. HKLM/Software/Microsoft/Windows/CurrentVersion/Run и создаешь строковый параметр)
cscript.exe c:\reboot.vbs

-=+DeMoN+=- писал(а):Может легче машинку вылечить удаленную? потому как пинг - штука крайне ненадежная и ребутить она тебе будет ее больше чем работать....

вот меня тоже смущают ложные срабатывания :think:

Добавлено спустя 35 секунд:
kirill@KIA писал(а):если более 5 мин нет пинга - то ребутить

ща попробую модернизировать :)

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 18:22
Simpleuser
Ну, в целом программка должна вести себя примерно так:
Сидеть тихонько в трее и раз в минут 15-30 пинговать кого-нибудь внешнего. При получении вменяемого ответа успокаиваться до следующего раза. При неполучении ответа (естественно, не пропадания 1-2 пакетов, а стабильного глухаря) ребутать комп (естественно, с последующей самозагрузкой) Если клиническое пропадание сети (5-7 ребутов подряд без восстановления пингов) то мессага на экран типа "Проверьте кабель, вашу мать !" и стоп до реакции пользователя.

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 18:59
kirill@KIA
Simpleuser писал(а):Сидеть тихонько в трее и раз в минут 15-30 пинговать кого-нибудь внешнего.

внешний - это опасно..как ты выберишь этот хост внешний? а если это не твой канал а бздынь имено этот удаленный хост?

у тя GW роутер местный или у провайдера?

Добавлено спустя 1 минуту 5 секунд:
Melior, в принципе то что надо , с пометкой на таймаут
тока тревожит желание аФтора на это
Simpleuser писал(а):Сидеть тихонько в трее

:z) :z) :z)

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 19:25
Simpleuser
kirill@KIA писал(а):Simpleuser писал(а):
Сидеть тихонько в трее и раз в минут 15-30 пинговать кого-нибудь внешнего.

внешний - это опасно..как ты выберишь этот хост внешний? а если это не твой канал а бздынь имено этот удаленный хост?

Ну, можно пинговать непосредственно МОЙ сервак. Если ОН "бздынь", то проблема с недоступностью ремотной машины как-то блекнет... )))))))
kirill@KIA писал(а):у тя GW роутер местный или у провайдера?

А это чо ??? :udiv:
kirill@KIA писал(а):Melior, в принципе то что надо , с пометкой на таймаут
тока тревожит желание аФтора на это
Simpleuser писал(а):
Сидеть тихонько в трее

А что именно "тревожит" ? Ну, хрен с ним, с треем. :z) Пусть просто показывается в списке процессов, мне прятаться не от кого :roll: . Здорово будет, если можно менять параметры (в простеньком конфиг-файле) - IP для простукивания, интервал задержки...

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 20:41
kirill@KIA
Simpleuser писал(а):А это чо ???

Шлюз - GateWay

Добавлено спустя 1 минуту 47 секунд:
Simpleuser писал(а):Здорово будет, если можно менять параметры (в простеньком конфиг-файле) - IP для простукивания, интервал задержки...

дык те написали скрипт , вешаешь его в автозагрузку.
и када надо меняй в текстовом файлике и IP и таймаут.. ;)

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 21:02
filius
Так винда теряет коннект или программы удаленного доступа?

Может Netop попробовать?

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 22:32
Melior
Сделал :)
'IP или имя проверяемого компа
CompName = "ya.ru"
'Задержка обновления пинга, в милисекундах
delay = 900000
'Задержка подтверждения обрыва сети, в милисекундах
delay_ping = 60000
'Количество проверок после которых появляется сообщение
count = 5
'Имя файла для хранения числа перезагрузок
filename = "c:\log_reboot.txt"
'Сообщение о невозможности восстановления коннекта
msg = "Проверьте кабель, вашу мать!"

Set objFSO = CreateObject("Scripting.FileSystemObject")
If (objFSO.FileExists(filename)) Then
Set file1 = objFSO.OpenTextFile(filename, 1, True)
i = cint(file1.ReadLine)
file1.close
Else
i = 0
End If
do
reboot_on = true
if ping(CompName) then
wscript.echo Date & " " & Time & " Пинг пропал! Ждем проверки"
WScript.Sleep delay_ping
if ping(CompName) then
if i >= count then
x = MsgBox(msg,vbRetryCancel+vbExclamation,"Проблема с сетью!")
select case x
case 2
exit do
case else
reboot_on = false
end select
end if
Set file1 = objFSO.OpenTextFile(filename, 2, True)
i = i + 1
file1.Write i
file1.Close
if reboot_on then
wscript.echo Date & " " & Time & " Перезагрузка"
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each OpSys In OpSysSet
OpSys.Reboot()
next
Exit do
end if
else
wscript.echo Date & " " & Time & " Пинг появился"
end if
else
wscript.echo Date & " " & Time & " Пинг до " & CompName & " прошел"
i = 0
end if
WScript.Sleep delay
loop

Function ping(name)
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& name & "'")
For Each objStatus In objPing
If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then
ping = True
Else
ping = False
End If
Next
End Function


Сделал все что просил. Единственное в трее не висит :D увы, vb так не умеет
И еще, если прога набрала предельное количество перезагрузок и потом связь восстановят, то надо файлик лога удалить иначе будет ругаться :(

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 23:06
kirill@KIA
Melior, :roul:
молодца! решпект!

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 23:22
Simpleuser
Melior, Ыыыыыыы.... *вращаяглазамивразныестороны* :pray: :shock:
Это какое-то шибко сильное колдунство... :shocked:
Андрюх, спасибо тебе большое !!! :Heppy: Надеюсь поможет !
Завтра дозвонюсь до юзверей, попрошу вручную перегрузить в очередной раз и залью туда этот скрипт. :pst:

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 08 фев 2010, 23:42
bovik
А вот такой вариант тебе не пойдёт? Перезагруз при сбое службы? Только надо чётко определить какая служба отвечает за сетевые соединения...

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 09 фев 2010, 02:46
Melior
Все!
Можете давать мне звание главного задрота киа-клуба :z) :z) :z)
Скрипт в предыдущем посте подправил :D
Теперь не нужно ничего удалять - прога все делает сама :roul:
После превышения количества перезагрузок выскочит окошко с кнопками Повтор и Закрыть. Если нажать на Повтор, то прога опять стукнется по адресу и вылезет то же окошко, если не достучится. Закрыть - это закрыть прогу...повторный запуск либо через батник(ярлык), либо ручками, либо перезагрузкой.
По-умолчанию прога будет запускаться в консольном окне и там писать умные вещи :) Если это окно не нужно, то в автозапуске надо будет нацарапать
cscript //B //nologo c:\reboot.vbs

правда я этот метод не пробовал... :roll:

Добавлено спустя 2 минуты 54 секунды:
bovik писал(а):А вот такой вариант тебе не пойдёт? Перезагруз при сбое службы? Только надо чётко определить какая служба отвечает за сетевые соединения...

У винды иногда такое случается, что служба работает, но на самом деле она совершенно не работает :o

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 09 фев 2010, 03:42
Одинокий Валенок
Ох, навеяло мне это воспоминания. как в одной конторе был сервак, который периодически вис, а на новый денег не было. Там была шикарная система - напротив него поставили комп с полудохлым сидюком. И написали программку - как только сервак переставал пингаться, комп открывал сидюк и треем нажимал на ресет. Голь на выдумки хитра.
Кто ж мне эту историю рассказывал? :think: Не помню, хоть убейте

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 09 фев 2010, 10:48
Simpleuser
Одинокий Валенок, Поищи на башорге... )))))

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 09 фев 2010, 14:35
Одинокий Валенок
Simpleuser
Тоже вариант, кстати :)
Между прочим, а подобные проги разве еще называются резидентами? Винда же многозадачная. Это во времена ДОСа были TSRы.

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 09 фев 2010, 14:49
Melior
Одинокий Валенок писал(а):Между прочим, а подобные проги разве еще называются резидентами?

Неа :)
Понятие программы-резидента я в первый и последний раз встречал в инсте при изучении микрокопроцессоров :)

Re: Резидента маленького для WinXP может кто написать ?

СообщениеДобавлено: 09 фев 2010, 15:47
Одинокий Валенок
Melior
Int 21h :roll: