Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как записать ping в файл


Записать ping в файл со временем

Появилась задача записать в файл результат работы команды ping с указанием времени.

Задача возникла в следующем контексте:
В компании стоит аудиошлюз и в какой-то момент времени менеджеры сообщают что возникают проблемы со связью. Клиент слышит менеджера, менеджер не слышит клиента. Поскольку вопрос срочный, пытаемся решить его с тех поддержкой. Но поскольку в момент общения с техподдержкой всё хорошо, и по оборудованию всё работало. Они просят сообщить, как быстро отвечал их сервер в момент появления проблемы. Вот мы и сделаем так, что-бы менеджер сказал время проблемы, мы посмотрели это время в логах и сообщили, проседал канал или нет.

while true; do TIME=`date +%T`;PING=`ping 213.221.45.121 -c 1 | grep "icmp_seq=1"`; echo "[$TIME] $PING" >>/home/prg/pingtime23.04.2019.log; tail -n 1 /home/prg/pingtime23.04.2019.log;sleep 1; done

Запустили и видим что команда выполняется в консоли.

А файл то создан? Проверим:

tail --lines=10 pingtime23.04.2019.log

Да, ping пишется со временем и в консоль и в файл!

А если у нас стоит Windows? Тогда команда для записи ping в файл со временем будет такой:

for /l %i in (0,0,1) do @cmd /c "echo.|set/p=%TIME:~0,8^%" >> c:\users\userpc\pinglog23.04.2019.log & ping -n 1 213.221.45.121 | findstr "Превышен Ответ" >> c:\users\userpc\pinglog23.04.2019.log & ping -n 2 localhost > nul

Кодировка созданного файла будет IBM866, так что блокнотом не посмотреть.

Второй случай с предысторией

На самом деле история та же. Два аудиошлюза IP телефонии и проблемы со связью. Необходимо исключить проблемы со скоростью доступа к серверу аудиошлюзов. Для этого ping со временем в лог файл таким образом (Операционная Ubuntu)

ping 213.221.45.121 | while read pong; do echo "$(date): $pong"; done > pingWithTime.log

Получаем что-то типа этого:

Вт авг 27 13:26:42 MSK 2019: PING 213.221.45.121 (213.221.45.121) 56(84) bytes of data.
 Вт авг 27 13:26:42 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=1 ttl=60 time=3.40 ms
 Вт авг 27 13:26:43 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=2 ttl=60 time=2.28 ms
 Вт авг 27 13:26:44 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=3 ttl=60 time=2.51 ms
 Вт авг 27 13:26:45 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=4 ttl=60 time=2.89 ms
 

Как результат имеем большой файл из которого нам в какой-то момент понадобится получить информацию. Как?

Например так:

grep -E '(Вт авг 27 14:23)' pingWithTime.log

Так мы получим все значения ping совершённые в 14:23 и сможем произвести анализ полученных данных.

Будет что-то типа этого:

Вт авг 27 14:23:00 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=3374 ttl=60 time=2.70 ms
 Вт авг 27 14:23:01 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=3375 ttl=60 time=2.65 ms
 Вт авг 27 14:23:02 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=3376 ttl=60 time=2.33 ms
 Вт авг 27 14:23:03 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=3377 ttl=60 time=2.52 ms
 Вт авг 27 14:23:04 MSK 2019: 64 bytes from 213.221.45.121: icmp_seq=3378 ttl=60 time=2.91 ms
 

windows-xp - Сохранить вывод Ping в текстовом файле

Используйте перенаправление, например:

ping 192.168.1.1 -t > filename.txt 

Это перенаправит весь (стандартный) вывод из программы в filename.txt , который будет создан, если он не существует, и перезаписан, если он существует.

Вы можете использовать >> вместо > чтобы перенаправить вывод в файл и добавить результаты в конец файла вместо перезаписи (спасибо @Jane T за напоминание).

Обратите внимание, что вы не получите нормальный вывод на экран, если вы сделаете это.

Обновление в ответ на комментарий

Чтобы задержать пинг и записывать время каждого, вы можете сделать некоторые сценарии.

Вот быстрый пакетный файл Windows, который я создал вместе. Он печатает время, пингует Google, затем ждет 3 секунды, а затем повторяется. Я не специалист по пакетным файлам, поэтому, если кто-то обнаружит какие-либо проблемы, отметьте их! И это, вероятно, не самый лучший способ достичь того, чего вы хотите, - это действительно может привести к отдельному вопросу.

@ECHO OFF :LOOPSTART time /T ping www.google.com -n 4 sleep -m 3000 GOTO LOOPSTART 

Сохраните это в файле .bat где-нибудь, отредактируйте цель ping и время задержки, как вам нужно, затем запустите .bat с помощью перенаправления, чтобы перекачать вывод всей вещи в файл.

Обратите внимание, что этот пакетный файл никогда не заканчивается, но может быть завершен с помощью Ctrl + C и затем Y, если он запускается из cmd . (Вы должны нажать Y, потому что он спрашивает, хотите ли вы остановить пакетный файл - даже если вы не видите вопрос, потому что вы перенаправили вывод!)

windows-7 - Пакетный файл для записи результатов пинга в текстовый файл

Я знаю, что это вариант уже заданного вопроса, но после исследования и нескольких неудачных попыток, мне кажется, мне нужна помощь.

Я хотел бы пинговать два веб-сайта неоднократно и записывать время и результаты в текстовом файле.

Я нашел этот вопрос Сохранить вывод Ping в текстовом файле очень полезным, но несколько версий, которые я пробовал, не работают.

Если я выполню следующее в командном окне, он создаст текстовый файл в моем каталоге пользователей, как и следовало ожидать, с повторяющимися эхо-запросами, записанными правильно.

ping xxx.xxx.xxx.xxx -t > filename.txt 

Но если я создам следующий файл ping.dat и сохраню его на рабочем столе. Когда я запускаю его, он одновременно открывает окно cmd с нужным временем, а также создает нужный текстовый файл на моем рабочем столе. К сожалению, файл содержит только время, а не результаты проверки связи, и результаты, очевидно, не разделены на 3 секунды, как ожидалось.

@ECHO OFF :LOOPSTART time /T ping xxx.xxx.xxx.xxx -n 4 >> filename.txt ping yyy.yyy.yyy.yyy -n 4 >> filename.txt sleep -m 3000 GOTO LOOPSTART 

Я предположил, что моя проблема связана с тем, как я пытался записать результаты, но если я изменяю пакетный файл, удаляя ссылку «>> filename.txt», все, что он делает, это открывает окно cmd, которое мгновенно заполняется отметками времени.

@ECHO OFF :LOOPSTART time /T ping xxx.xxx.xxx.xxx -n 4 ping yyy.yyy.yyy.yyy -n 4 sleep -m 3000 GOTO LOOPSTART 

Отсюда и мои вопросы

А) Есть идеи, что я делаю не так?

Б) Как мне изменить отметку времени так, чтобы она была ЧЧ: ММ: СС, а не ЧЧ: ММ

Вся помощь приветствуется.

С.

@ LInker3000 Спасибо за ответ. Я должен был упомянуть об этом в своем первоначальном вопросе, но я уже попробовал это. Когда я добавил '>> filename.txt' к отметке времени, теперь я получаю окно команды, которое заполняется текстом: «Процесс не может получить доступ к файлу, потому что он используется другим процессом». После завершения процесса созданный текстовый файл имеет только одну временную метку и текст «Завершить пакетное задание (Y/N)».

Пишем Ping в файл. Какой Errorlevel выбрать? — Хабр Q&A

Написал вот такой скрипт в .bat файле:
@Echo Off :begin echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time%>> %DATE%.txt ping -n 5 192.168.1.100>> %DATE%.txt if errorlevel 1 echo ALARM Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time% >>"%date%ALARM_192.168.1.100.txt" ping -n 30 127.0.0.1 >nul echo ********************************************************>> %DATE%.txt goto begin

Все работает, но в процессе обнаружил следующее:
errorlevel 1 это "превышен интервал ожидания для запроса"
errorlevel 0 это "заданный узел недоступен" и "обмен пакетами...(нормальный пинг)"

Вопрос: мне нужно писать в файл тревоги и когда превышен интервал и когда заданный узел недоступен. Как это сделать, если у "узел недоступен" errorlevel как у нормального пинга?

И еще: чем принципиально отличается "заданный узел недоступен" от "превышен интервал ожидания для запроса"

Ping c временной меткой на каждый пакет

Скрипт позволяет сохранить в лог-файл результат работы команды ping. Особенностью данного скрипта является то, что в лог-файле напротив результата прохождения каждого пакета имеется временная метка.

17:56:48 192.168.16.1: число байт=32 время=1мс TTL=255
17:56:49 192.168.16.1: число байт=32 время=1мс TTL=255
17:56:50 192.168.16.1: число байт=32 время=1мс TTL=255
...

Скрипт может быть полезен для диагностики и анализа проблем в сети.

Создайте файл pingtime.vbs:

option explicit
' conHost -- адрес хоста для слежения
' conCheckInterval -- временной интервал
const conHost = "192.168.16.1", conCheckInterval = 1000

' создаём объект:
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
 

Запуск скрипта осуществляется командой cscript //nologo pingtime.vbs>pingtime.log. Результат работы сохраняется в файле pingtime.log.

Скачать pingtime.zip.

Пожалуйста, оцените статью:

Как сохранить в текстовый файл вывод командной строки Windows

Windows
  • Recluse
  • 15.11.2016
  • 36 975
  • 15
  • 21.04.2020
  • 20
  • 19
  • 1
  • Содержание статьи

Командная строка - неизменный компонент любой операционной системы Windows, который берет свое происхождение прямиком от её предка - операционной системы MS-DOS. Данная программа имеет довольно широкие возможности, но сейчас мы поговорим о довольно примитивной вещи - сохранение (по факту - перенаправление) вывода командной строки в текстовый файл.

Почитать о том, как сделать тоже самое в Linux\BSD системах можно в этой статье.

Использование перенаправления выполнения команд

В случае, если необходимо просто сохранить все, что вывела командная строка в текстовый файл, то нужно после введенной команды добавить символ ">", что приведет к созданию текстового файла и весь вывод командной строки отправится туда. Пример:

ping 8.8.8.8 > C:\Logs\ping.txt

Обратите внимание, что командная строка при перенаправлении вывода может создать только текстовый файл, но не папку. Если вы введете несуществующий путь, то получите ошибку!

Как видно, командная строка не вывела никакого результата введенной команды на экран, но зато сохранила все в файл ping.txt. К сожалению, существуют ограничения перенаправления вывода, которые не позволяют одновременно отображать вывод и в окне командной строки, и сохранять их в текстовый файл. Однако, можно воспользоваться хитростью - сразу по завершению выполнения команды вывести содержимое текстового файла на экран с помощью команды type. Получится что-то следующее:

ping 8.8.8.8 > C:\Logs\ping.txt & type C:\Logs\ping.txt

Если требуется файл не записывать (существующий текстовый файл будет перезаписан), а дописывать (существующий текстовый файл будет дополнен), нужно вместо одного символа ">" использовать два - ">>".

ping 8.8.8.8 >> C:\Logs\ping.txt

В случае, если в текстовый файл нужно сохранить так же какой-то текст (например, в составе bat файла), то можно воспользоваться комбинацией с командой echo:

echo Имя компьютера: %computername% > C:\Logs\ping.txt
 echo Проверка пинга до google.ru > C:\Logs\ping.txt
 ping google.ru > C:\Logs\ping.txt

Содержимое получившегося текстового файла будет следующим:

Для того, чтобы вывод был только в текстовый файл (без показа в окне командной строки), нужно вставить первой строкой в bat файле команду @echo off

Сценарии

- Как написать пинг в текстовый файл с помощью VBS

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с сотрудником
.

windows - Запись пингов в файлы пакетом

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии
.

for loop - Пакетный пинг списка имен компьютеров и запись результатов в файл

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант
.

Как сделать простой пинг и сохранить результат в файле на Python с помощью os.system

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.Командная строка

- Сохранить вывод Ping в текстовый файл

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Сохранить результаты ping в текстовый файл с именем компьютера

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Смотрите также