From fc66c7db0b9061402acb2373a0f9c403c2afd7dd Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 10 Feb 2026 23:15:21 +0700 Subject: [PATCH] feat(ping): implement additional fallback for interface resolution by selecting the first 'ether' interface if none is specified --- backend/routes/mikrotikConfigRoutes.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/routes/mikrotikConfigRoutes.js b/backend/routes/mikrotikConfigRoutes.js index 9f26439..ffb30c6 100644 --- a/backend/routes/mikrotikConfigRoutes.js +++ b/backend/routes/mikrotikConfigRoutes.js @@ -392,6 +392,28 @@ async function pingViaInterface(req, res) { } } + // 4) Последний фоллбек: если ifaceName до сих пор не определён, + // пробуем взять первый интерфейс, имя которого начинается с "ether" + // (обычно это основной WAN/LAN-порт). + if (!ifaceName) { + try { + const ifRes = await client.command('interface/print', { + '.proplist': ['name'], + '.query': ['name~^ether'], + }); + const data = ifRes?.data; + const interfaces = Array.isArray(data) ? data : (data ? [data] : []); + const firstEther = interfaces.find( + (it) => typeof it.name === 'string' && it.name.toLowerCase().startsWith('ether'), + ); + if (firstEther && typeof firstEther.name === 'string') { + ifaceName = firstEther.name; + } + } catch (_) { + // Если не получилось прочитать интерфейсы — просто продолжаем без interface. + } + } + const body = {}; body.address = target; body.count = Number(count) > 0 ? Number(count) : 5;