Страница 1 из 1

parssing вывода команды ping

Добавлено: 09 ноя 2020, 20:08
UncleGringo
Уважаемые Форумчане!

Есть подозрение что спрашиваю "простой" вопрос, ответ на который лежит на поверхности,
но простите, не смог найти ни примеров и не получилось сделать самому script для моей задачи.
Вроде перелопатил https://wiki.mikrotik.com/wiki/Manual:Scripting и https://wiki.mikrotik.com/wiki/Manual:S ... g-examples, но не получается.
Тут на форуме тоже не нашел похожей обработки того что команда возвращает или плохо искал.
Ткните пожалуйста в что либо подобное, как разбирается вывод от команд.

Задача вроде бы "простая":

есть команда ping:

Код: Выделить всё

[admin@Router] > /ping 8.8.8.8 count=3 ttl=1 
  SEQ HOST                                     SIZE TTL TIME  STATUS                                                                                                                   
    0 10.*.*.1                                       84  64 1ms   TTL exceeded                                                                                                             
    1 10.*.*.1                                       84  64 0ms   TTL exceeded                                                                                                             
    2 10.*.*.1                                       84  64 1ms   TTL exceeded                                                                                                             
    sent=3 received=0 packet-loss=100% 
или

Код: Выделить всё

[admin@Router] > /ping 8.8.8.8 count=3 ttl=5
  SEQ HOST                                     SIZE TTL TIME  STATUS                                                                                                                   
    0 72.14.217.60                               56 251 3ms   TTL exceeded                                                                                                             
    1 72.14.217.60                               56 251 5ms   TTL exceeded                                                                                                             
    2 72.14.217.60                               56 251 4ms   TTL exceeded                                                                                                             
    sent=3 received=0 packet-loss=100% 
ping возвращает значение количества удачных пингов, в данном случае "3"

как получить значения HOST, TIME, STATUS для каждого пига и среднее значения "packet-loss" ?

Заранее спасибо!

P.S. вот пробую... но это не работает...

Код: Выделить всё

:local pingssent 0;
:local pingloss 0;
:local pinglimit 4;
:local ttllimit 4;

/ping address=8.8.8.8 count=$pinglimit ttl=$ttllimit  do={
        :if ($sent = $pinglimit) do={
             :set pingssent $"sent"
             :if ($pingssent > 0) do={
                  :set pingloss $"packet-loss"
             }
        }
}

:log info (Pings send: " . $pingssent ." lost: ". $pingloss )

Re: parssing вывода команды ping

Добавлено: 09 ноя 2020, 22:51
Virtue
UncleGringo писал(а): 09 ноя 2020, 20:08 но это не работает...
немного переделал, чтоб работало..

Код: Выделить всё

{
:local pinglimit 4;
:local ttllimit 4;
:local sent [/ping address=8.8.8.8 count=$pinglimit ttl=$ttllimit]
:local pingloss (100 - 100 / $pinglimit*$sent)
:log info message="Pings send:$sent lost:$pingloss %"
}

Re: parssing вывода команды ping

Добавлено: 09 ноя 2020, 23:35
UncleGringo
Virtue писал(а): 09 ноя 2020, 22:51
UncleGringo писал(а): 09 ноя 2020, 20:08 но это не работает...
немного переделал, чтоб работало..
спасибо дружище, но это не вариант, это вы просто рассчитываете самостоятельно значение % потерь,
а мне хочется получить/обрабатывать, то что ping возвращает, особенно HOST и значение задержки каждого пинга...

Re: parssing вывода команды ping

Добавлено: 10 ноя 2020, 13:29
Sertik
Этого пинг вернуть не может. /ping в ROS Микротик возвращает только количество удачных пингов

Re: parssing вывода команды ping

Добавлено: 10 ноя 2020, 16:37
UncleGringo
Sertik писал(а): 10 ноя 2020, 13:29 Этого пинг вернуть не может. /ping в ROS Микротик возвращает только количество удачных пингов
Может как-то можно вывод /ping запихнуть автоматом в array ? или есть/видел примеры парсинга вывода таких команд как ping !?

Re: parssing вывода команды ping

Добавлено: 11 ноя 2020, 10:42
Sertik
Ping массив данных в скрипте не отдаёт, только количество удачных ответов.

Re: parssing вывода команды ping

Добавлено: 08 май 2023, 18:05
DyadyaGenya
Sertik писал(а): 11 ноя 2020, 10:42 Ping массив данных в скрипте не отдаёт, только количество удачных ответов.
Ситуация не поменялась? Все ещё нельзя достать результаты пингования?
Ну или записать в каждую ячейку/значение массива строку результатов пинга, чтоб было типа такого:

Код: Выделить всё

array {
  "0  8.8.8.8    56  116  58ms28us",
  "1  8.8.8.8    56  116  36ms707us"
  }

Re: parssing вывода команды ping

Добавлено: 10 май 2023, 09:21
Brook
Можно сохранить результат в файл, и его уже распарсить, если очень надо.

Код: Выделить всё

local a "ping 192.168.1.25 count 4";
execute script=$a file=1.txt

Re: parssing вывода команды ping

Добавлено: 19 июл 2023, 12:10
BratWolfa
Присоединяюсь, частично, к данному вопросу. По такому принципу хотел ребутить роутер, к примеру, если пинг выше 200 ... Или можно, как то, это решить другими методами?

Re: parssing вывода команды ping

Добавлено: 19 июл 2023, 14:32
Virtue
BratWolfa писал(а): 19 июл 2023, 12:10 Присоединяюсь, частично, к данному вопросу. По такому принципу хотел ребутить роутер, к примеру, если пинг выше 200 ... Или можно, как то, это решить другими методами?
можно использовать мой метод с количеством удачных ответов, но при этом ограничить каждый запрос временем ожидания 200, например так

Код: Выделить всё

ping interval=00:00:00.200 ya.ru