«PING с Записью в Файл и Отображением Времени». Всем здравствуйте. Столкнулся с ситуацией когда надо весь PING залогировать с отображением времени. Устанавливать различные программы на сервер не хочется. Сразу пришла в голову мысль о CMD только как это сделать??? Начал копать интернет, нашел очень много различных скриптов, но что-то работать ничего не хотело. Как я ни бился как не старался но время никак не хотело прописываться в логах PING. Долго я провел время на различных тематических форумах, и наконец заработало.
PING с записью в файл:
Вот собственно и сам скрипт. Его можно немного отредактировать и пометь для своих целей. Если вы не хотите экспериментов, то смело пролистывайте вниз там вы найдете готовый zip архив.
Скрипт:
option explicit ' conHost -- адрес хоста для слежения ' conCheckInterval -- временной интервал const conHost = "8.8.8.8", conCheckInterval = 999 ' создаём объект: dim soWshShell : set soWshShell = CreateObject("WScript.Shell") WScript.Quit Main() function WriteLog(strText) WScript.Stdout.WriteLine FormatDateTime(Time(), vbLongTime) & " " & strText end function function GetHostStatus(strHost) dim oPing : set oPing = soWshShell.Exec("ping -n 1 " & strHost) dim strOut : strOut = "" do WScript.Sleep 100 if not oPing.Stdout.AtEndOfStream then strOut = strOut & oPing.Stdout.ReadAll end if loop until oPing.Status = 1 dim oRegExp : set oRegExp = new RegExp oRegExp.IgnoreCase = true oRegExp.Pattern = "[^ ]+:.+TTL=[^\r\n]+" dim oMatches : set oMatches = oRegExp.Execute(strOut) if oMatches.Count > 0 then GetHostStatus = oMatches(0).Value else GetHostStatus = "Inaccessible!.." end if end function function Main() do WriteLog(GetHostStatus(conHost)) WScript.Sleep(conCheckInterval) loop end function
Важно: В файле pingtime.log иногда не читабельный текст. Данная проблема возникает из-за кодировки. Чтоб избежать этого смените кодировку. Либо просто поменяйте текстовый редактор. Мне нравится Notepad++ он подсвечивает код и в нем очень много настроек.
Скачав архив вы найдете 3 файла.
- pingtime.vbs
- start.bat
- pingtime.log
Чтоб не заморачиваться рекомендую скачать и распаковать архив, запустить start.bat. И уже через пару секунд вы увидите pingtime.log начнет записывать пинги.
Спасибо большое помогло.
с горем попалам сделал…. а вообще током нихрена не понятно….
Что именно не понятно??? Что поменять чтоб было более понятней?
Мерси…
при записи в файл ползут иероглифы. Как исправить???
Думаю стоит попробовать поменять кодировку файла .txt
кириллицу не пишет в логе. Набор символов
Поменяйте кодировку в вашем логе и будет счастье.
Спасибо
Ой спасибо то что нужно. Говорят точки wi-fi отваливаются. А доказать ничего не могу. Вот теперь с логом все будет предельно ясно.
Спасибо!
oRegExp.Pattern = «[^ ]+:.+TTL=[^rn]+»
тут последний плюс лишний
Спасибо большое! Исправил!!!
Выдает данную ошибку
C:\pingtime.vbs(1, 1) Ошибка компиляции Microsoft VBScript: Недопустимый знак
Привет Макс! Статью чуть исправил, там был Лишний +
Так же сделал архив куда закинул скрипт и батник для запуска. так что скачай, распакуй и пользуйся 😉
Если не доверяешь что там за файлы, они спокойно открываются текстовым документом. 😉
Кстати у тебя скорее всего была ошибка из-за кодировки самого скрипта.
Когда перехожу по данной ссылке:
Написано: «Ничего не найдено
Владелец удалил файлы либо закрыл к ним доступ или в ссылке опечатка.»
ссылку обновил тоже.
Спасибо)
https://yadi.sk/d/R2qJk4Nvi5F_Sw если что то вот она.
Ах да совсем забыл, если удалить pingtime.log то при запуске скрипта он появится снова! ?
@echo off
rem pinger v2.1
setlocal>nul
rem в этот файл будет выведен лог работы команды ПИНГ
set filelogname=»outlog.txt»
rem адрес, который следует пинговать
set iptoping=»8.8.8.8″
cls
echo ping %iptoping% ……..
rem время в формате 23:15:51,50
set xxa=%TIME%
rem дата в формате 07.09.2016
set xxd=%DATE%
rem формирование трех имен для временных файлов вида
rem ~0809201630121088.tmpp1
rem ~0809201630121089.tmpp1
rem ~0809201630121080.tmpp1
rem формирование строки текущего времени (для назв. временн. файлов)
rem кол-во единиц часов+кол-во минут+кол-во секунд+кол-во д.секунд (без раздел.)
set xxb=%xxa:~-10,1%%xxa:~-8,2%%xxa:~-5,2%%xxa:~-2,2%
rem кол-во десятков часов
set xxc=%xxa:~-11,1%
rem если десятков часов нет, то дописать в xxb впереди тройку
rem иначе дописать впереди xxb кол-во десятков часов
if -%xxc%==- (set xxb=3%xxb%) else set xxb=%xxc%%xxb%
rem если число часов xxb = 0(формат времени с ведущ.0) -то дописать впереди 3
if -%xxb:~0,1%==-0 set xxb=3%xxb%
rem дни+месяцы+годы+время(xxb) — всё без разделителей
set out1=%xxd:~0,2%%xxd:~3,2%%xxd:~6,4%%xxb%
rem out1 без последней цифры
set out2=%out1:~0,-1%
rem последняя цифра out1
set xxa=%out1:~-1%
rem прибавить 2 к последней цифре out1
set /a xxa+=2
rem out2 + последний знак из xxa
set out3=%out2%%xxa:~-1%
set /a xxa-=1
set out2=%out2%%xxa:~-1%
rem создание временного файла и вывод в него
rem получили три различных имени файла без точек
set out1=~%out1%.tmpp1
set out2=~%out2%.tmpp1
set out3=~%out3%.tmpp1
rem удаление старых временных файлов
del %TEMP%\*.tmpp1
rem вывод даты в лог
date /t > %filelogname%
:loop
rem пауза в одну сек с небольшим, между основными пингами (-n 3 = 2сек и т.д.)
ping -n 2 localhost > nul
rem вывод результатов ОДНОГО пинга в файл out1
ping %iptoping% -n 1 > %TEMP%\%out1%
rem вывод текущего времени в файл out2 (с лишним «введите» «текущее» и т.п.)
echo.|time > %TEMP%\%out2%
rem вывод времени в out3 (чистый вид с миллисекундами)
for /f «tokens=1,2,3» %%a in (%TEMP%\%out2%) do if -%%a==-Текущее (echo %%c > %TEMP%\%out3%)
rem файл аут2 больше не нужен
del /q %TEMP%\%out2%
rem создадим переменную времени timedata вида 00:00:00 (отсекая миллисек.)
for /f «tokens=1 delims=,» %%a in (%TEMP%\%out3%) do set timedata=%%a
rem различный вывод при =1мс и превыш. интервала ожидания
for /f «tokens=1,2,3,4,5,6,7» %%a in (%TEMP%\%out1%) do if -%%a==-Ответ (if -%%f==-время^<1мс (
echo %%a %%b %%c %%d %%e время^^^ %TEMP%\%out3%
) else (echo %%a %%b %%c %%d %%e %%f %%g > %TEMP%\%out3%)
)else if -%%a==-Превышен (echo %%a %%b %%c %%d %%e > %TEMP%\%out3%)
rem создадим переменную пинга
for /f «tokens=*» %%a in (%TEMP%\%out3%) do set pingdata=%%a
rem запишем полученные данные в выходной файл, добавив метку времени
echo %timedata% %pingdata% >> %filelogname%
goto loop
Большое спасибо за полезный комментарий
Интересно, интересно….
Супер! Спасибо! Скажите пожалуйста а какие параметры в скрипте нужно поменять чтобы пинговать через каждые 10 минут и чтобы кол-во пингов было не менее 100 ?