У меня RouterOS 7.1. Вопрос: как проверить активное интернет-соединение, если UDP использовать нельзя, а /ping не возвращает полезный код завершения? Это оказалось намного сложнее, чем я думал. Команда /ping не имеет кода выхода, который можно проверить (!).
Сначала я пытался использовать — но это не работает. Мой провайдер блокирует UDP, так что переключение с wan на internet не происходит:
[admin@MikroTik] /interface/detect-internet/state> print
Columns: NAME, STATE, STATE-CHANGE-TIME
# NAME STATE STATE-CHANGE-TIME
0 wlan1 no-link feb/07/2022 13:23:20
1 lte1 wan feb/07/2022 13:23:26
Потом я попробовал /ping. И /ping выдает результаты, которые отличаются от тех, что пишут на форумах. Может, это баг в версии 7+? Вот что я вижу:
Для валидного IP:
[admin@MikroTik] > :set $pingResult [:ping count=1 1.1.1.1]
Columns: SEQ, HOST, SIZE, TTL, TIME
SEQ HOST SIZE TTL TIME
0 1.1.1.1 56 51 118ms503us
[admin@MikroTik] > :put [:typeof $pingResult]
nothing
Для невалидного IP:
[admin@MikroTik] > :set $pingResult [/ping count=1 172.1.1.1]
Columns: SEQ, HOST, STATUS
SEQ HOST STATUS
0 172.1.1.1 timeout
[admin@MikroTik] > :put [:typeof $pingResult]
nothing
То есть, получается, проверить код выхода команды /ping никак нельзя?
Вот что меня почти поражает из-за этого:
[admin@MikroTik] > :if ([/ping 1.1.1.1 count=1] = 1) do={:put "Down"} else={:put "Up"}
Columns: SEQ, HOST, SIZE, TTL, TIME
SEQ HOST SIZE TTL TIME
0 1.1.1.1 56 51 134ms149us
Up
[admin@MikroTik] > :if ([/ping 172.1.1.1 count=1] = 1) do={:put "Down"} else={:put "Up"}
Columns: SEQ, HOST, STATUS
SEQ HOST STATUS
0 172.1.1.1 timeout
Up
Сначала я пытался использовать — но это не работает. Мой провайдер блокирует UDP, так что переключение с wan на internet не происходит:
[admin@MikroTik] /interface/detect-internet/state> print
Columns: NAME, STATE, STATE-CHANGE-TIME
# NAME STATE STATE-CHANGE-TIME
0 wlan1 no-link feb/07/2022 13:23:20
1 lte1 wan feb/07/2022 13:23:26
Потом я попробовал /ping. И /ping выдает результаты, которые отличаются от тех, что пишут на форумах. Может, это баг в версии 7+? Вот что я вижу:
Для валидного IP:
[admin@MikroTik] > :set $pingResult [:ping count=1 1.1.1.1]
Columns: SEQ, HOST, SIZE, TTL, TIME
SEQ HOST SIZE TTL TIME
0 1.1.1.1 56 51 118ms503us
[admin@MikroTik] > :put [:typeof $pingResult]
nothing
Для невалидного IP:
[admin@MikroTik] > :set $pingResult [/ping count=1 172.1.1.1]
Columns: SEQ, HOST, STATUS
SEQ HOST STATUS
0 172.1.1.1 timeout
[admin@MikroTik] > :put [:typeof $pingResult]
nothing
То есть, получается, проверить код выхода команды /ping никак нельзя?
Вот что меня почти поражает из-за этого:
[admin@MikroTik] > :if ([/ping 1.1.1.1 count=1] = 1) do={:put "Down"} else={:put "Up"}
Columns: SEQ, HOST, SIZE, TTL, TIME
SEQ HOST SIZE TTL TIME
0 1.1.1.1 56 51 134ms149us
Up
[admin@MikroTik] > :if ([/ping 172.1.1.1 count=1] = 1) do={:put "Down"} else={:put "Up"}
Columns: SEQ, HOST, STATUS
SEQ HOST STATUS
0 172.1.1.1 timeout
Up
