hostinfo/utils/index.ts
2025-03-15 17:22:38 +01:00

36 lines
894 B
TypeScript

export function isPrivateIP(host: string): boolean {
try {
const rawIp = host.startsWith('[') ? host.slice(1, -1) : host
if (rawIp === 'localhost') return true
if (rawIp.includes('.')) {
const parts = rawIp.split('.').map(Number)
if (parts.length !== 4 || parts.some(isNaN)) return false
return (
parts[0] === 10 ||
(parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) ||
(parts[0] === 192 && parts[1] === 168) ||
(parts[0] === 169 && parts[1] === 254)
)
}
if (rawIp.includes(':')) {
const ip = rawIp.split('%')[0]
if (ip === '::1') return true
const firstHextet = parseInt(ip.split(':')[0], 16)
if ((firstHextet & 0xfe00) === 0xfc00) return true
if ((firstHextet & 0xffc0) === 0xfe80) return true
return false
}
return false
} catch {
return false
}
}