25 lines
813 B
TypeScript
25 lines
813 B
TypeScript
import dns from "node:dns/promises"
|
|
|
|
/** RouterOS «src-address» для /tool/ping и /tool/traceroute ожидает IPv4, не FQDN. */
|
|
export function isIpv4Literal(host: string): boolean {
|
|
const s = host.trim()
|
|
if (!/^\d{1,3}(\.\d{1,3}){3}$/.test(s)) return false
|
|
return s.split(".").every((p) => {
|
|
const n = Number.parseInt(p, 10)
|
|
return Number.isFinite(n) && n >= 0 && n <= 255
|
|
})
|
|
}
|
|
|
|
/** Возвращает первый A-запись IPv4 для управления; если host уже IPv4 — как есть. */
|
|
export async function resolveRosSrcIpv4(host: string): Promise<string | null> {
|
|
const h = host.trim()
|
|
if (!h) return null
|
|
if (isIpv4Literal(h)) return h
|
|
try {
|
|
const addrs = await dns.resolve4(h)
|
|
return addrs[0] ?? null
|
|
} catch {
|
|
return null
|
|
}
|
|
}
|