diff --git a/component/routing/domain_matcher/ahocorasick_slimtrie.go b/component/routing/domain_matcher/ahocorasick_slimtrie.go index 3a5349c..38cfb2f 100644 --- a/component/routing/domain_matcher/ahocorasick_slimtrie.go +++ b/component/routing/domain_matcher/ahocorasick_slimtrie.go @@ -100,11 +100,12 @@ func (n *AhocorasickSlimtrie) MatchDomainBitmap(domain string) (bitmap []uint32) bitmap = make([]uint32, N) domain = strings.ToLower(strings.TrimSuffix(domain, ".")) // Domain should consist of 'a'-'z' and '.' and '-' - for _, b := range []byte(domain) { - if !ahocorasick.IsValidChar(b) { - return bitmap - } - } + // NOTE: DO NOT VERIFY THE DOMAIN TO MATCH: https://github.com/daeuniverse/dae/issues/528 + // for _, b := range []byte(domain) { + // if !ahocorasick.IsValidChar(b) { + // return bitmap + // } + // } // Suffix matching. suffixTrieDomain := ToSuffixTrieString("^" + domain) for _, i := range n.validTrieIndexes { diff --git a/component/routing/domain_matcher/ahocorasick_slimtrie_test.go b/component/routing/domain_matcher/ahocorasick_slimtrie_test.go index 49017db..4ee8731 100644 --- a/component/routing/domain_matcher/ahocorasick_slimtrie_test.go +++ b/component/routing/domain_matcher/ahocorasick_slimtrie_test.go @@ -6,11 +6,12 @@ package domain_matcher import ( + "math/rand" + "testing" + "github.com/daeuniverse/dae/common/consts" "github.com/sirupsen/logrus" "golang.org/x/exp/slices" - "math/rand" - "testing" ) func TestAhocorasickSlimtrie(t *testing.T) { diff --git a/component/sniffing/http.go b/component/sniffing/http.go index 10ef494..e3cb440 100644 --- a/component/sniffing/http.go +++ b/component/sniffing/http.go @@ -60,7 +60,7 @@ func (s *Sniffer) SniffHttp() (d string, err error) { continue } if strings.EqualFold(string(key), "host") { - return strings.TrimSpace(string(value)), nil + return string(value), nil } } return "", ErrNotFound diff --git a/component/sniffing/sniffer.go b/component/sniffing/sniffer.go index 8e4813a..301e11d 100644 --- a/component/sniffing/sniffer.go +++ b/component/sniffing/sniffer.go @@ -75,7 +75,7 @@ func sniffGroup(sniffs ...sniff) (d string, err error) { for _, sniffer := range sniffs { d, err = sniffer() if err == nil { - return d, nil + return NormalizeDomain(d), nil } if err != ErrNotApplicable { return "", err diff --git a/component/sniffing/sniffing.go b/component/sniffing/sniffing.go index 937707c..acd59bd 100644 --- a/component/sniffing/sniffing.go +++ b/component/sniffing/sniffing.go @@ -8,6 +8,8 @@ package sniffing import ( "errors" "fmt" + "net" + "strings" ) var ( @@ -19,3 +21,15 @@ var ( func IsSniffingError(err error) bool { return errors.Is(err, Error) } + +func NormalizeDomain(host string) string { + host = strings.ToLower(strings.TrimSpace(host)) + if strings.HasSuffix(host, "]") { + // Sniffed domain may be like `[2606:4700:20::681a:d1f]`. We should remove the brackets. + return strings.Trim(host, "[]") + } + if domain, _, err := net.SplitHostPort(host); err == nil { + return domain + } + return strings.TrimSuffix(host, ".") +}