Войти

Показать полную графическую версию : Как сделать что-бы скрипт игнорировал не нужные ответы Ping


root221
30-08-2012, 20:42
Здравствуйте,

Нужно что бы скрипт срабатывал только при положительном отклике от сервера, который пингуется а все остальные игнорировал и пытался по новой соединиться с сервером, который указан в скрипте, как только соединение установлено, скрипт должен срабатывать и писать "Результат положительный - Alive" а если всё таки не удаётся в течении 20 секунд никак соединиться, тогда "Результат отрицательный - Done"

вот скрипт который бы я хотел до работать с вашей помощью

:: Скрипт для проверки интернета.
set WshShell = CreateObject("WScript.Shell")
Return = WshShell.Run("ping 77.88.21.3 -n 1 -w 400", 0, true)
If Return=0 then
WScript.Echo "Результат положительный - Alive"
Else WScript.Echo "Результат отрицательный - Done"
End If

Приветствуется скрипт написанный и на CMD/Bat.

root221
30-08-2012, 20:46
Забыл, если сетевую карту на компьютере выключить, то скрипт который выше, сразу же пишет "Результат отрицательный - Done" - а надо сделать, только если в течении 20 секунд сетевую карту не включили в сеть, тогда уже выводить "Результат отрицательный - Done"

Iska
30-08-2012, 21:43
root221, используйте не «ping.exe», а Wbem: Win32_PingStatus class (http://msdn.microsoft.com/en-us/library/windows/desktop/aa394350(v=vs.85).aspx).

root221
31-08-2012, 00:25
Iska, не хотелось бы мне пользоваться дополнительными приложениями.


помогите пожалуйста сделать это на VBS или на CMD

root221
31-08-2012, 00:45
описываю более яснее.

набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Превышен интервал ожидания для запроса.

(Это сообщение нужно игнорировать в течении 20 секунд, если появился удачный пинг за эти 20 сек, тогда вывести "Результат положительный - Alive" если не появится тогда "Результат отрицательный - Done")


Отключаем сетевую карту

снова набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Заданный узел недоступен.
Заданный узел недоступен.

(Это сообщение нужно игнорировать в течении 20 секунд, если появился удачный пинг за эти 20 сек, тогда вывести "Результат положительный - Alive" если не появится тогда "Результат отрицательный - Done")



А вот это наш положительный результат (если пинг удачный тогда вывести сообщение "Результат положительный - Alive" его как вы уже поняли игнорировать не надо)

снова набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Ответ от 124.0.1.1: число байт=32 время<1мс TTL=128

Anonymоus
31-08-2012, 03:03
root221, попробуйте это

@Echo Off
Set IP=77.88.21.3
Set Timeout=20

Set i=0
:Back
If %i% GEQ %Timeout% (Echo Результат отрицательный - Done&Exit /B 1)
Ping -n 1 -w 400 %IP% 2>nul|Find "TTL=">nul&&(
Echo Результат положительный - Alive&Exit /B 0
)||(
Set /A i+=1
Ping -n 2 -w 1000 127.0.0.1>nul
GoTo Back
)

А ещё у вас личка переполнена сообщениями, не отослать ничего.

root221
31-08-2012, 05:09
Всё хорошо, но лучше всё таки переписать не много... Спасибо за ранее.

набираю ping 124.0.1.1

Обмен пакетами с 124.0.1.1 по 32 байт:

Превышен интервал ожидания для запроса.

(Это сообщение нужно игнорировать в течении 20 секунд, если появился удачный пинг за эти 20 сек, тогда вывести "Результат положительный - Alive" если не появится тогда если появится это сообщение тогда сразу выводить "Результат отрицательный - Done")

root221
31-08-2012, 05:31
А ещё у вас личка переполнена сообщениями, не отослать ничего. »

Щас исправим.

Iska
31-08-2012, 07:19
Iska, не хотелось бы мне пользоваться дополнительными приложениями. помогите пожалуйста сделать это на VBS или на CMD»
Ощущение такое, что Вы материал по ссылке и не смотрели. Это и есть решение для Windows Script Host, равно как и под любого другого клиента Automation.

root221
31-08-2012, 07:36
Iska, вы можете написать готовое решение из предложенного? просто у меня нет времени разбираться в том материале, когда это можно написать и на CMD...

Iska
31-08-2012, 09:23
root221, как Вы думаете, а у кого оно есть — время…

root221
31-08-2012, 19:08
Iska, для тех кто часто занимается скрипто писанием и щёлкает их как орешки, много труда написать не составит, да и времени много не отнимет, т.к человек уже заранее знает, что надо написать в скрипте, что бы он работал так, как просит автор темы.

Ранее я тоже этим занимался в плотную, щас просто позабыл и нету времени восстановить, свои познания в этом деле.

P.S поэтому я обратился на форум за помощью.

root221, как Вы думаете, а у кого оно есть — время… »

Ну некоторые, всё-же находят время, что-бы помогать другим участникам форума.

root221
31-08-2012, 23:10
Попытаюсь вам заново объяснить то что мне нужно, я думаю вы меня просто плохо поняли.


Нужно следующее.

Всё на примерах.

=========================
Например я в консоле ввожу ping 192.168.0.1 (Комп вкл.)

пошли ответы

Ответ от 192.168.0.1: число байт=32 время<1мс TTL=128

тогда нужно что бы скрипт моментально выводил на экран сообщение что интернет есть.

=========================

далее

опять же например я в консоле ввожу ping 192.168.0.1 (Комп выкл.)

пошли ответы

Превышен интервал ожидания для запроса.

тогда нужно что бы скрипт моментально выводил на экран сообщение что интернета нет.

==========================

опять же далее

Например я в консоле ввожу ping 192.168.0.1 (Комп вкл.)

пошли ответы

Заданный узел недоступен.

вот тут ВНИМАТЕЛЬНЕЕ - тогда нужно что бы скрипт выводил на экран сообщение только через 20 сек что Заданный узел недоступен.

p.s выводит он это сообщение если адаптер отключен и мне нужно что-бы он это сообщение игнорировал 20 сек а если по истечению 20 сек адаптер не вкл. тогда выводить это сообщение Заданный узел недоступен. а если за эти 20 сек его включили тогда другие сообщения "моментальные", либо есть интернет, либо нету.
==========================

root221
02-09-2012, 22:28
в общем сделал так



:TestMsgInt

setlocal enabledelayedexpansion

for /f %%t in ('ping 87.250.250.3 -n 2 -w 500') do (
echo."%%t" | find "Ответ">nul && (
echo WScript.Echo "╚эЄхЁэхЄ ЁрсюЄрхЄ." >"%WinDir%\temp\msgint.vbs" && start /B "" "%WinDir%\temp\msgint.vbs"
exit /b 1
)
echo."%%t" | find "Превышен">nul && (
echo WScript.Echo "╚эЄхЁэхЄ эх ЁрсюЄрхЄ." >"%WinDir%\temp\msgint.vbs" && start /B "" "%WinDir%\temp\msgint.vbs"
exit /b 1
)
echo."%%t" | find "Заданный">nul && (
EndLocal
GoTo :TestMsgInt
)
echo."%%t" | find "При">nul && (
EndLocal
GoTo :TestMsgInt
)
)



Теперь возникает вопрос а как сделать что бы проверка была не по find а например по ErrorLevel Ведь если я захочу использовать этот скрипт в анг версии Windows то мне каждый раз придётся менять русское значение которое ищет find на английское.




© OSzone.net 2001-2012