Как ставить метку времени для каждого результата пинга?

Пишите нам!

Архитектурная мастерская.

Продвижение сайтов от optimism.ru

Page generation time: 0.14s (PHP: 43% – SQL: 57%) – SQL queries: 44 – GZIP disabled – Debug off

Тоже задавался вопросом непрерывного пинга с логгированием и временными метками. Написал бат-файл:

 @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мс >=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 время^^^<1мс %%g > %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 

Ping
returns this by default:

 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms 

Is there some way I can get it to add the timestamp?

 Mon 21 May 2012 15:15:37 EST | 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms 

I’m on OS X v10.7 (Lion) which seems to have some BSD
version of ping.

:/>  Использование powershell для запроса azure dev ops

Peter Mortensen's user avatar

asked May 21, 2012 at 5:17

John Mee's user avatar

I could not redirect the Perl based solution to a file for some reason so I kept searching and found a bash
only way to do this:

 Wed Jun 26 13:09:23 CEST 2013: PING www.google.fr (173.194.40.56) 56 bytes of data.
Wed Jun 26 13:09:23 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=1 ttl=57 time=7.26 ms
Wed Jun 26 13:09:24 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=2 ttl=57 time=8.14 ms 

The credit goes to https://askubuntu.com/a/137246

Community's user avatar

answered Jun 26, 2013 at 11:13

richk's user avatar

3 gold badges
12 silver badges
12 bronze badges

If your AWK doesn’t have strftime()
:

 ping host | perl -nle 'print scalar(localtime), " ", $_' 

To redirect it to a file, use standard shell redirection and turn off output buffering:

 ping host | perl -nle 'BEGIN {$|++} print scalar(localtime), " ", $_' > outputfile 

If you want ISO8601 format for the timestamp:

 ping host | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' > outputfile 

Phrogz's user avatar

112 gold badges
651 silver badges
744 bronze badges

answered May 21, 2012 at 5:59

Dennis Williamson's user avatar

Dennis Williamson

90 gold badges
373 silver badges
438 bronze badges

From man ping
:

  -D Print timestamp (unix time + microseconds as in gettimeofday) before each line. 

It will produce something like this:

 [1337577886.346622] 64 bytes from 4.2.2.2: icmp_req=1 ttl=243 time=47.1 ms 

Then timestamp could be parsed out from the ping
response and converted to the required format with date
.

Jonathan Soifer's user avatar

answered May 21, 2012 at 5:20

ДМИТРИЙ МАЛИКОВ's user avatar

ДМИТРИЙ МАЛИКОВ

11 gold badges
78 silver badges
131 bronze badges

On OS X you can simply use the –apple-time option:

 ping -i 2 --apple-time www.apple.com 

Produces results like:

 10:09:55.691216 64 bytes from 72.246.225.209: icmp_seq=0 ttl=60 time=34.388 ms
10:09:57.687282 64 bytes from 72.246.225.209: icmp_seq=1 ttl=60 time=25.319 ms
10:09:59.729998 64 bytes from 72.246.225.209: icmp_seq=2 ttl=60 time=64.097 ms 

answered Aug 22, 2017 at 10:10

Nicolas Grison's user avatar

  1. terminal + file output:

  2. file output background:

Community's user avatar

answered May 27, 2016 at 6:02

xuanyuanaosheng's user avatar

1 gold badge
11 silver badges
9 bronze badges

My original submission was incorrect because it did not evaluate date for each line. Corrections have been made.

  ping google.com | xargs -L 1 -I '{}' date '+%+: {}' 
 Thu Aug 15 10:13:59 PDT 2013: PING google.com (74.125.239.103): 56 data bytes
Thu Aug 15 10:13:59 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=0 ttl=55 time=14.983 ms
Thu Aug 15 10:14:00 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=1 ttl=55 time=17.340 ms
Thu Aug 15 10:14:01 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=2 ttl=55 time=15.898 ms
Thu Aug 15 10:14:02 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=3 ttl=55 time=15.720 ms
Thu Aug 15 10:14:03 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=4 ttl=55 time=16.899 ms
Thu Aug 15 10:14:04 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=5 ttl=55 time=16.242 ms
Thu Aug 15 10:14:05 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=6 ttl=55 time=16.574 ms 

The -L 1 option causes xargs to process one line at a time instead of words.

answered Aug 9, 2013 at 0:52

Bromo's user avatar

3 silver badges
5 bronze badges

On macos you can do

ping --apple-time 127.0.0.1

The output looks like

 16:07:11.315419 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.064 ms
16:07:12.319933 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.157 ms
16:07:13.322766 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
16:07:14.324649 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.148 ms
16:07:15.328743 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.092 ms 

answered Oct 19, 2017 at 22:10

Clintm's user avatar

3 gold badges
41 silver badges
53 bronze badges

The simpler option is just using ts

from moreutils (fairly standard on most distros).

 $ ping 1.1.1.1 | ts
Feb 13 12:49:17 PING 1.1.1.1 (1.1.1.1) 56 bytes of data.
Feb 13 12:49:17 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=5.92 ms
Feb 13 12:49:18 64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=5.30 ms
Feb 13 12:49:19 64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=5.71 ms
Feb 13 12:49:20 64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=5.86 ms 
  ping 1.1.1.1 -I eth0 | ts "[%FT%X]" 

Allows for the same strftime format strings as the shell/ date
workaround.

John Mee's user avatar

34 золотых знака
152 серебряных значка
186 бронзовых знаков

ответил 13 февраля 2021 в 0:32

mario's user avatar

20 золотых значков
237 серебряных значков
291 бронзовый знак

 ping www.google.com | while read endlooop; do echo "$(date): $endlooop"; done 

Возвращает что-то вроде:

 Wednesday 18 January 09:29:20 AEDT 2017: PING www.google.com (216.58.199.36) 56
 bytes of data.
Wednesday 18 January 09:29:20 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=1 ttl=57 time=2.86 ms
Wednesday 18 January 09:29:21 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=2 ttl=57 time=2.64 ms
Wednesday 18 January 09:29:22 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=3 ttl=57 time=2.76 ms
Wednesday 18 January 09:29:23 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=4 ttl=57 time=1.87 ms
Wednesday 18 January 09:29:24 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=5 ttl=57 time=2.45 ms 

Peter Mortensen's user avatar

ответил 17 января 2017 в 16:40

nutria's user avatar

1 серебряный значок
1 бронзовый значок

Передать результат в awk
:

  ping host | awk '{if($0 ~ /bytes from/){print strftime()"|"$0}else print}' 

ответил 21 мая 2012 в 5:28

Prince John Wesley's user avatar

Вы можете создать функцию в своем ~/.bashrc
файл, так что вы получите команду ping ping-t
на вашей консоли:

 function ping-t { ping "$1" | while read pong; do echo "$(date): $pong"; done; } 

Теперь вы можете вызвать это на консоли:

 ping-t example.com 

Сб 31 марта 12:58:31 CEST 2018: PING example.com (93.184.216.34) 56

 байт данных. 
Сб, 31 марта, 12:58:31 CEST 2018: 64 байта из 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=48 time=208 ms
Сб, 31 марта, 12:58:32 CEST 2018: 64 байта из 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=48 time=233 ms

ответил 31 марта 2018 в 10:59

rubo77's user avatar

31 золотой значок 134 серебряных значка 226 бронзовых знаков

Вы не указали отметку времени или интервал времени, в течение которого вам потребуется такой вывод, поэтому я посчитал это бесконечным циклом. Вы можете изменить его соответственно в соответствии с вашими потребностями.

 while true
do echo -e "`date`|`ping -n -c 1 <IP_TO_PING>|grep 'bytes from'`" sleep 2
done 

Peter Mortensen's user avatar

ответил 21 мая 2012 в 18:25

v3nM's user avatar

1 золотой значок
12 серебряных значков
19 бронзовых знаков

 ping -D -n -O -i1 -W1 8.8.8.8 
 while true; do \ ping -n -w1 -W1 -c1 8.8.8.8 \ | grep -E "rtt|100%" \ | sed -e "s/^/`date` /g"; \ sleep 1; \
done 

ответил 31 окт 2014 в 2:16

Thomas Szteliga's user avatar

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

 ping -t Google.com|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 Google.com>nul" >C:\pingtest.txt 

Вам просто нужно изменить Google.com на имя вашего сервера. Он отлично работает для меня. и не забудьте остановить это, когда закончите. Файл pingtest.txt будет увеличиваться на 1 КБ в секунду (примерно).

Спасибо за raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/

ответил 15 сен 2017 в 13:35

DBALUKE HUANG's user avatar

Попробуйте эту строчку.

 while sleep 1;do echo "$(date +%d-%m-%y-%T) $(ping -c 1 whatever.com | gawk 'FNR==2{print "Response from:",$4,$8}')" | tee -a /yourfolder/pingtest.log;done 

Вам придется отменить это с помощью ctrl-c
то.

ответил 22 ноя 2016 в 1:50

nDCasT's user avatar

просто используйте sed и цикл:

 ping google.com|while read; do sed -r "s/(.*)/$(date) \1/g"<<<"$REPLY";done 

ответил 13 фев 2021 в 3:00

Saboteur's user avatar

5 серебряных значков
12 бронзовых знаков