2013-08-12 3 views
1

Возможно ли получить вывод данных при вводе пинга в командной строке?Как получить данные ping через командную строку?

В настоящее время у нас есть существующие серверы, которые мы проверяем ежедневно, набрав ping (IP-адрес) в командной строке, но только в начале дня. Мы будем уведомлены только в том случае, если сервер отключен, как только пользователь уведомит нас. Руководящая вещь - сделать непрерывный пинг и своевременно проверить, отключена ли она или нет.

Я хотел бы создать что-то, что выдаст подсказку (при непрерывном пинге в фоновом режиме), как только командная строка объявит, что есть «таймаут запроса», прерывистое соединение и т. Д. t необходимо вручную проверить состояние соединения.

+0

Что вы подразумеваете под данными ping? вывод в консоли/содержимое пакета ICMP? – Raptor

+0

Этот вид данных, который можно прочитать в командной строке: Ответ от 63.24.3.105: bytes = 32 time = 761ms TTL = 127 – Loren

+0

Лучше вам писать простую программу на C# (или Java, язык программирования не действительно имеет значение) для безотлагательного пинга вашего целевого сервера и записи результатов в журнал/базу данных. – Raptor

ответ

1

Я понимаю, что это было задано 2 месяца назад, но на него никогда не отвечали. Надеюсь, это все равно будет полезно кому-то. Разумеется, его гораздо проще реализовать с использованием «реального» языка программирования, но иногда вам нужно что-то, что использует только встроенные команды.

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

@echo off 
    cls 
    setlocal enabledelayedexpansion 
    REM Configuration: 
    set SERVER=google.com 
    set TIMEOUT_AFTER_PING_FAIL_SECONDS=5 
    set TIMEOUT_AFTER_PING_SUCCEED_SECONDS=10 
    set TIMEOUT_AFTER_LINK_DOWN_SECONDS=15 
    set DECLARE_LINK_DOWN_FAILS=5 

    set CONSECUTIVE_FAIL_COUNT=0 
    :Start 
    set PING_RESULT=Failure 
    for /f "delims=" %%X in ('ping /n 1 %SERVER%') do (
     set TEMPVAR=%%X 
     if "Reply from"=="!TEMPVAR:~0,10!" set PING_RESULT=Success 
     ) 
    goto:!PING_RESULT! 

    :Success 
    echo Ping Succeeded 
    set CONSECUTIVE_FAIL_COUNT=0 
    call:Sleep %TIMEOUT_AFTER_PING_SUCCEED_SECONDS% 
    goto:Start 

    :Failure 
    set /A CONSECUTIVE_FAIL_COUNT+=1 
    echo Ping Failed !CONSECUTIVE_FAIL_COUNT! Time(s) 
    if !CONSECUTIVE_FAIL_COUNT!==%DECLARE_LINK_DOWN_FAILS% (call:LinkDownHandler&goto:Start) 
    call:Sleep %TIMEOUT_AFTER_PING_FAIL_SECONDS% 
    goto:Start 

    :Sleep 
    REM See http://stackoverflow.com/questions/4317020/windows-batch-sleep 
    setlocal 
    set /A ITERATIONS=%1+1 
    ping -n %ITERATIONS% 127.0.0.1 >nul 
    goto:eof 

    :LinkDownHandler 
    echo Link is Down 
    set CONSECUTIVE_FAIL_COUNT=0 
    REM Add additional link-down handler actions here 
    call:Sleep %TIMEOUT_AFTER_LINK_DOWN_SECONDS% 
    goto:eof 
+0

Привет, спасибо за ответ. Хотя мне еще предстоит проанализировать и понять ваш код, я хотел бы поблагодарить вас за ваши усилия. Btw, это файл сценария? – Loren

+0

Это стандартный пакетный пакет Windows (протестирован и работает под управлением Windows XP SP3 и Windows 7). Скопируйте его в файл с расширением .bat (например, ServerCheck.bat), измените параметры конфигурации по мере необходимости, а затем просто введите ServerCheck (вам не нужно добавлять «.bat»). –

+0

Конечно, вам также необходимо добавить команды, чтобы делать что-то полезное, когда состояние изменяется (сообщение, отправленное на консоль, не очень полезно!). –