Files
mengyaping/mengyaping-backend/utils/intranet.go
2026-05-16 19:03:32 +08:00

38 lines
824 B
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package utils
import (
"net"
"net/url"
)
// IsIntranetURL 判断监控地址的主机是否为内网 / 本机 IP直填 IP 的虚拟局域网站点)。
// 仅识别主机名为 IPv4/IPv6 字面量的情况;公网域名不在此列。
func IsIntranetURL(raw string) bool {
u, err := url.Parse(raw)
if err != nil {
return false
}
host := u.Hostname()
if host == "" {
return false
}
ip := net.ParseIP(host)
if ip == nil {
return false
}
return isIntranetIP(ip)
}
func isIntranetIP(ip net.IP) bool {
if ip.IsLoopback() || ip.IsPrivate() || ip.IsLinkLocalUnicast() {
return true
}
// Go 1.17+ IsPrivate 已含 RFC1918、CGNAT 100.64/10、ULA 等;再兜底部分实现差异
if v4 := ip.To4(); v4 != nil {
if v4[0] == 100 && v4[1] >= 64 && v4[1] <= 127 {
return true
}
}
return false
}