Пинг с меткой времени
В командной строке Windows cmd
я использую ping -t to 10.21.11.81
Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238
Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238
Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238
Есть ли возможности получить такой вывод?
10:13:29.421875 Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238
10:13:29.468750 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238
10:13:29.468751 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238
Обратите внимание, что я хочу добиться этого только с помощью команд CMD
Ответы
Ответ 1
@echo off
ping -t localhost|find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!time! !data!)"
note: код, который будет использоваться внутри пакетного файла. Для использования из командной строки замените %%a
на %a
Запустите ping, принудительно настройте линейный буферизованный вывод (find /v
) и запустите процесс cmd
с включенным замедленным расширением, который сделает бесконечный цикл, считывая данные, передаваемые по каналам, которые будут отображаться на консоль с префиксом текущего время.
2015-01-08 отредактировано:
В более быстрых/более новых версиях машин /os в предыдущем коде есть проблема синхронизации, в результате чего set /p
читает строку, а команда ping
все еще нажимает на нее, а результат - на линии.
@echo off
ping -t localhost|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"
В начале подоболочки включаются две дополнительные команды pause
(можно использовать только один, но поскольку pause
потребляет входной символ, пара CRLF прерывается и строка с LF считывается), чтобы ждать для входных данных, а ping -n 2 localhost
включен для ожидания секунды для каждого чтения во внутреннем цикле. Результатом является более стабильное поведение и меньшее использование ЦП.
ПРИМЕЧАНИЕ. Внутренний ping
можно заменить на pause
, но тогда первый символ каждой прочитанной строки будет потребляться pause
и не будет получен с помощью set /p
Ответ 2
WindowsPowerShell:
вариант 1
ping.exe -t COMPUTERNAME|Foreach{"{0} - {1}" -f (Get-Date),$_}
вариант 2
Test-Connection -Count 9999 -ComputerName COMPUTERNAME | Format-Table @{Name='TimeStamp';Expression={Get-Date}},Address,ProtocolAddress,ResponseTime
Ответ 3
Пакет script:
@echo off
set /p host=host Address:
set logfile=Log_%host%.log
echo Target Host = %host% >%logfile%
for /f "tokens=*" %%A in ('ping %host% -n 1 ') do (echo %%A>>%logfile% && GOTO Ping)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do (
echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
timeout 1 >NUL
GOTO Ping)
Этот script запросит у какого хоста пинг.
Выход Ping выводится на экран и файл журнала.
Пример вывода файла журнала:
Target Host = www.nu.nl
Pinging nu-nl.gslb.sanomaservices.nl [62.69.166.210] with 32 bytes of data:
24-Aug-2015 13:17:42 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
24-Aug-2015 13:17:43 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
24-Aug-2015 13:17:44 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
Файл журнала называется LOG_ [имя хоста].log и записывается в ту же папку, что и script.
С уважением,
Йоуст Куин - Quanza Engineering
my linkedin
Ответ 4
Вы можете просто сделать это:
ping 10.0.0.1 | while read line; do echo `date` - $line; done
Хотя он не дает статистику, которую вы обычно получаете, когда вы нажимаете ^ C в конце.
Ответ 5
В Windows
Вы можете использовать один из других ответов.
В Unix/Linux
while :;do ping -n -w1 -W1 -c1 10.21.11.81| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done
Или как функция pingt
для вашего ~/.bashrc:
pingt() {
while :;do ping -n -w1 -W1 -c1 $1| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done
}
источник: fooobar.com/questions/116793/...
Ответ 6
Попробуйте следующее:
Создайте пакетный файл со следующим:
echo off
cd\
:start
echo %time% >> c:\somedirectory\pinghostname.txt
ping pinghostname >> c:\somedirectory\pinghostname.txt
goto start
Вы можете добавить свои собственные параметры в команду ping, исходя из ваших требований. Это не помещает отметку времени в ту же строку, что и пинг, но она по-прежнему получает необходимую вам информацию.
Еще лучший способ - использовать fping, перейдите сюда http://www.kwakkelflap.com/fping.html, чтобы загрузить его.
Ответ 7
Попробуйте это:
ping -c2 -s16 sntdn | awk '{print NR "|" strftime ( "% Y-% m-% d_% H:% M:% S" ) "|" $0}' ВЕР-КВАДРАТНАЯ ЧАСТЬ, ОЖАЛА Й ТЕ СИРВА
Ответ 8
Другой метод powershell (мне нужны только отказы)
$ping = new-object System.Net.NetworkInformation.Ping
$target="192.168.0.1"
Write-Host "$(Get-Date -format 's') Start ping to $target"
while($true){
$reply = $ping.send($target)
if ($reply.status -eq "Success"){
# ignore success
Start-Sleep -Seconds 1
}
else{
Write-Host "$(Get-Date -format 's') Destination unreachable" $target
}
}
Ответ 9
Мне также нужно это, чтобы отслеживать сетевую проблему для моей проблемы с зеркальным отображением базы данных. Я использую код команды, как показано ниже:
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 увеличится на 4,5 КБ в минуту (около).
Спасибо за raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/
Ответ 10
Я думаю, что мой код - это то, что нужно всем:
ping -w 5000 -t -l 4000 -4 localhost|cmd /q /v /c "(pause&pause)>nul &for /l %a in () do (for /f "delims=*" %a in ('powershell get-date -format "{ddd dd-MMM-yyyy HH:mm:ss}"') do (set datax=%a) && set /p "data=" && echo([!datax!] - !data!)&ping -n 2 localhost>nul"
для отображения:
[Fri 09-Feb-2018 11:55:03] - Pinging localhost [127.0.0.1] with 4000 bytes of data:
[Fri 09-Feb-2018 11:55:05] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:08] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:11] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:13] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
note: код, который будет использоваться внутри командной строки, и у вас должна быть установлена опция powershell на os.
Ответ 11
Улучшение ответа MC ND для Windows.
Мне нужен сценарий для запуска в WinPE, поэтому я сделал следующее:
@echo off
SET TARGET=192.168.1.1
IF "%~1" NEQ "" SET TARGET=%~1
ping -t %TARGET%|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost >nul"
Это может быть жестко привязано к определенному IP-адресу (192.168.1.1
в моем примере) или принять переданный параметр. И как в ответе MC ND, повторяет пинг каждые 1 секунду.