fix: not match top domain

This commit is contained in:
Skyxim 2023-04-20 05:45:22 +00:00
parent ec234ac0a8
commit 7513761540
3 changed files with 20 additions and 9 deletions

View file

@ -26,14 +26,14 @@ var (
var Dispatcher *SnifferDispatcher var Dispatcher *SnifferDispatcher
type SnifferDispatcher struct { type SnifferDispatcher struct {
enable bool enable bool
sniffers map[sniffer.Sniffer]SnifferConfig sniffers map[sniffer.Sniffer]SnifferConfig
forceDomain *trie.DomainSet forceDomain *trie.DomainSet
skipSNI *trie.DomainSet skipSNI *trie.DomainSet
skipList *cache.LruCache[string, uint8] skipList *cache.LruCache[string, uint8]
rwMux sync.RWMutex rwMux sync.RWMutex
forceDnsMapping bool forceDnsMapping bool
parsePureIp bool parsePureIp bool
} }
func (sd *SnifferDispatcher) TCPSniff(conn *N.BufferedConn, metadata *C.Metadata) { func (sd *SnifferDispatcher) TCPSniff(conn *N.BufferedConn, metadata *C.Metadata) {

View file

@ -25,7 +25,7 @@ func ValidAndSplitDomain(domain string) ([]string, bool) {
if domain != "" && domain[len(domain)-1] == '.' { if domain != "" && domain[len(domain)-1] == '.' {
return nil, false return nil, false
} }
domain=strings.ToLower(domain) domain = strings.ToLower(domain)
parts := strings.Split(domain, domainStep) parts := strings.Split(domain, domainStep)
if len(parts) == 1 { if len(parts) == 1 {
if parts[0] == "" { if parts[0] == "" {
@ -126,6 +126,9 @@ func (t *DomainTrie[T]) Optimize() {
func (t *DomainTrie[T]) Foreach(print func(domain string, data T)) { func (t *DomainTrie[T]) Foreach(print func(domain string, data T)) {
for key, data := range t.root.getChildren() { for key, data := range t.root.getChildren() {
recursion([]string{key}, data, print) recursion([]string{key}, data, print)
if data != nil && data.inited {
print(joinDomain([]string{key}), data.data)
}
} }
} }

View file

@ -15,6 +15,9 @@ func TestDomainSet(t *testing.T) {
"www.google.com", "www.google.com",
"test.a.net", "test.a.net",
"test.a.oc", "test.a.oc",
"Mijia Cloud",
".qq.com",
"+.cn",
} }
for _, domain := range domainSet { for _, domain := range domainSet {
@ -22,8 +25,13 @@ func TestDomainSet(t *testing.T) {
} }
set := tree.NewDomainSet() set := tree.NewDomainSet()
assert.NotNil(t, set) assert.NotNil(t, set)
assert.True(t, set.Has("test.cn"))
assert.True(t, set.Has("cn"))
assert.True(t, set.Has("Mijia Cloud"))
assert.True(t, set.Has("test.a.net")) assert.True(t, set.Has("test.a.net"))
assert.True(t, set.Has("www.qq.com"))
assert.True(t, set.Has("google.com")) assert.True(t, set.Has("google.com"))
assert.False(t, set.Has("qq.com"))
assert.False(t, set.Has("www.baidu.com")) assert.False(t, set.Has("www.baidu.com"))
} }