feat(ping): add fallback mechanism for interface resolution by querying MikroTik routes based on gateway IP
Publish Fast Tabler Docker image / build-and-push-fast (push) Failing after 1m8s
Publish Fast Tabler Docker image / build-and-push-fast (push) Failing after 1m8s
This commit is contained in:
@@ -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 = {};
|
const body = {};
|
||||||
|
|||||||
Reference in New Issue
Block a user