From e914b0003c467de9721c37483640b8c2cdd527ed Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 10 Feb 2026 23:03:55 +0700 Subject: [PATCH] feat(ping): add fallback mechanism for interface resolution by querying MikroTik routes based on gateway IP --- backend/routes/mikrotikConfigRoutes.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/backend/routes/mikrotikConfigRoutes.js b/backend/routes/mikrotikConfigRoutes.js index 7c3e097..9f26439 100644 --- a/backend/routes/mikrotikConfigRoutes.js +++ b/backend/routes/mikrotikConfigRoutes.js @@ -366,6 +366,30 @@ async function pingViaInterface(req, res) { } } } + + // 3) Если даже из /network-config не смогли получить interface — + // пробуем вытащить его напрямую из маршрутов MikroTik по полю gateway. + if (!ifaceName) { + try { + const routeRes = await client.command('ip/route/print', { + '.proplist': ['gateway'], + '.query': [`gateway~${gatewayIp}`], + }); + const data = routeRes?.data; + const routes = Array.isArray(data) ? data : (data ? [data] : []); + const match = routes.find((r) => typeof r.gateway === 'string' && r.gateway.includes(gatewayIp)); + if (match && typeof match.gateway === 'string') { + const gwStr = match.gateway; + const percentIdx = gwStr.indexOf('%'); + if (percentIdx >= 0 && percentIdx < gwStr.length - 1) { + ifaceName = gwStr.slice(percentIdx + 1); + } + } + } catch (_) { + // Если чтение маршрутов не удалось — просто продолжаем без interface, + // чтобы не ломать сам ping. + } + } } const body = {};