internal/normalize: simplify IP parser; cleanup

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I7a860779a4fe49b8034d66f2abd910fc6a6a6964
This commit is contained in:
raf 2026-03-10 09:39:15 +03:00
commit fd3a832f7b
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
2 changed files with 45 additions and 28 deletions

View file

@ -1,6 +1,7 @@
package normalize package normalize
import ( import (
"net"
"net/url" "net/url"
"strings" "strings"
@ -21,34 +22,20 @@ func isInternalHost(hostname string) bool {
return true return true
} }
// Private IPv4 ranges (RFC1918) // Check if hostname is an IP address
if strings.HasPrefix(hostname, "10.") || if ip := net.ParseIP(hostname); ip != nil {
strings.HasPrefix(hostname, "192.168.") || // Private IPv4 ranges (RFC1918)
strings.HasPrefix(hostname, "172.16.") || if ip.IsPrivate() {
strings.HasPrefix(hostname, "172.17.") || return true
strings.HasPrefix(hostname, "172.18.") || }
strings.HasPrefix(hostname, "172.19.") || // Additional localhost checks for IP formats
strings.HasPrefix(hostname, "172.20.") || if ip.IsLoopback() {
strings.HasPrefix(hostname, "172.21.") || return true
strings.HasPrefix(hostname, "172.22.") || }
strings.HasPrefix(hostname, "172.23.") || // Link-local addresses
strings.HasPrefix(hostname, "172.24.") || if ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast() {
strings.HasPrefix(hostname, "172.25.") || return true
strings.HasPrefix(hostname, "172.26.") || }
strings.HasPrefix(hostname, "172.27.") ||
strings.HasPrefix(hostname, "172.28.") ||
strings.HasPrefix(hostname, "172.29.") ||
strings.HasPrefix(hostname, "172.30.") ||
strings.HasPrefix(hostname, "172.31.") {
return true
}
// IPv6 loopback and local
if strings.HasPrefix(hostname, "::1") ||
strings.HasPrefix(hostname, "fe80::") ||
strings.HasPrefix(hostname, "fc00::") ||
strings.HasPrefix(hostname, "fd00::") {
return true
} }
return false return false

View file

@ -108,6 +108,36 @@ func TestExtractReferrerDomain(t *testing.T) {
siteDomain: "example.com", siteDomain: "example.com",
want: "internal", want: "internal",
}, },
{
name: "private IP 172.16.x (RFC1918)",
referrer: "http://172.16.0.1/page",
siteDomain: "example.com",
want: "internal",
},
{
name: "private IP 172.31.x (RFC1918 upper bound)",
referrer: "http://172.31.255.1/page",
siteDomain: "example.com",
want: "internal",
},
{
name: "private IP 172.20.x (middle of range)",
referrer: "http://172.20.50.100/page",
siteDomain: "example.com",
want: "internal",
},
{
name: "public IP 172.15.x (just outside private range)",
referrer: "http://172.15.0.1/page",
siteDomain: "example.com",
want: "other", // not internal, but invalid TLD
},
{
name: "public IP 172.32.x (just outside private range)",
referrer: "http://172.32.0.1/page",
siteDomain: "example.com",
want: "other", // not internal, but invalid TLD
},
} }
for _, tt := range tests { for _, tt := range tests {