Скрипт выбора наибольшего отклика пинга и массивы

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

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Ответить
DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

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

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:put "SEQ HOST SIZE TTL TIME STATUS"
:for i from=0 to=($count-1) do={
  :put "Ping $i: [ping $address count=1 interval=$interval]"
}
Потом решил его усложнить и выводить как обычные пинги, с размером, ттл, временем отклика

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:for i from=0 to=($count-1) do={
  :local pingResult [ping $address count=1 interval=$interval]
  :local pingTime [:pick [:toarray $pingResult] 3]
  :put "Ping $i: $pingResult Time: $pingTime"
}
Получилась ерунда. Тогда решил зайти с другой стороны и записать результаты в массивы:

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:local ttlArray {}
:local sizeArray {}
:local timeArray {}

:put "Columns: SEQ, HOST, SIZE, TTL, TIME"
:for i from=0 to=($count-1) do={
  :local result [/ping $address count=1 interval=$interval];
  :local ttl [:tonum [:pick $result 3]]
  :local size [:tonum [:pick $result 2]]
  :local time [:tonum [:pick [:find $result "time=" 0] $result]]
  :put ("Ping $i: " . $ttl . " " . $size . " " . $time . "ms")
  :set ($ttlArray->$i) $ttl
  :set ($sizeArray->$i) $size
  :set ($timeArray->$i) $time
}
И сразу же выбило синтаксическую ошибку в строке 5. Подозреваю, что не правильно объявляю массив. Можете подсказать где ошибка?


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

Чтоб было понятней. В окончательном результате хочу получить что-то типа такого:

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

Nomber   SEQ        HOST      SIZE     TTL   TIME       STATUS    Count    Interval
Ping 0: [0   ping 8.8.8.8     56      116   39ms80us    Success   count=1 interval=1]
Ping 1: [1   ping 8.8.8.8     56      116   36ms707us   Success   count=1 interval=1]

Max ping is Ping 0 (39ms80us)
При этом есть промежуточные хотелки. Сделать вывод массивов, которые состоят из данных SIZE, TTL, TIME.


DyadyaGenya
Сообщения: 31
Зарегистрирован: 08 май 2023, 01:29

Пока что на вики нашел ошибку объявления массива, теперь выглядит так:

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:local ttlArray {:toarray ""}
:local sizeArray {:toarray ""}
:local timeArray {:toarray ""}

:for i from=0 to=($count-1) do={
    :local result [/ping $address count=1 interval=$interval]

    :local ttl [/ping get $result name="ttl"]
    :local size [/ping get $result name="size"]
    :local time [/ping get $result name="time"]

    :set ($ttlArray->"$i") $ttl
    :set ($sizeArray->"$i") $size
    :set ($timeArray->"$i") $time

    :put ("Ping $i: $result")
}

:put ("TTL array: $ttlArray")
:put ("Size array: $sizeArray")
:put ("Time array: $timeArray")
Но теперь в 12-й строке ошибка:

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

expected end of command (line 12 column 27)
типа ожидалось окончание команды


Ответить