From 9bc5a32074e5570697e99b1b3f1abe28a36362df Mon Sep 17 00:00:00 2001 From: wweir Date: Tue, 29 Jan 2019 13:30:52 +0800 Subject: [PATCH] Add more fuzz match support @release --- .gitignore | 8 +++----- Makefile | 5 +++-- conf/sower.toml | 32 +++++++++++++++++--------------- util/suffix_tree.go | 15 +++++++++++++-- util/suffix_tree_test.go | 24 ++++++++++++++---------- 5 files changed, 50 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index 3e210c6..3907931 100644 --- a/.gitignore +++ b/.gitignore @@ -12,12 +12,10 @@ *.out .DS_Store -**/.DS_Store +._* +*.swp +*.swo .vscode .idea sower -cert.pem -**/cert.pem -privkey.pem -**/privkey.pem /sower.toml diff --git a/Makefile b/Makefile index 26cba6e..9a7f2f5 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,11 @@ SERVER:=127.0.0.1:5533 -default: build +default: test build generate: go generate ./... - +test: + go test -race ./... build: GO111MODULE=on go build -v -ldflags \ "-X main.version=$(shell git describe --tags) \ diff --git a/conf/sower.toml b/conf/sower.toml index 6bbb0a0..1d9a330 100644 --- a/conf/sower.toml +++ b/conf/sower.toml @@ -8,24 +8,26 @@ dns_server="223.5.5.5" # Alibaba public dns client_ip="127.0.0.1" # listen the IP, dns target is the IP # clear_dns_cache="killall -HUP mDNSResponder" blocklist=[ - "*.google.com", # google - "*.goo.gl", - "*.googleusercontent.com", - "*.googleapis.com", - "*.youtube.com", # youtube - "*.ytimg.com", - "*.ggpht.com", - "*.googlevideo.com", - "*.facebook.com", # facebook - "*.xx.fbcdn.net", - "*.twitter.com", # twitter - "*.twimg.com", - "*.blogspot.com", # blogspot - "*.wikipedia.org", # wikipeida + "**.google.com", # google + "**.goo.gl", + "**.googleusercontent.com", + "**.googleapis.com", + "**.youtube.com", # youtube + "**.ytimg.com", + "**.ggpht.com", + "**.googlevideo.com", + "**.facebook.com", # facebook + "**.xx.fbcdn.net", + "**.twitter.com", # twitter + "**.twimg.com", + "**.blogspot.com", # blogspot + "**.wikipedia.org", # wikipeida ] whitelist=[ "iamp.*.*.*", "iamp.*.*", - "imap-mail.*.*", + "imap-mail.outlook.com", + "**.qq.com", + "**.baidu.com" ] verbose=0 diff --git a/util/suffix_tree.go b/util/suffix_tree.go index 144f86a..9cd5ead 100644 --- a/util/suffix_tree.go +++ b/util/suffix_tree.go @@ -54,10 +54,15 @@ func (n *node) add(secs []string) { case 1: n.node[secs[length-1]] = &node{node: map[string]*node{"": &node{}}} default: - subNode, ok := n.node[secs[length-1]] + sec := secs[length-1] + if sec == "**" { + sec = "*" + } + + subNode, ok := n.node[sec] if !ok { subNode = &node{node: map[string]*node{}} - n.node[secs[length-1]] = subNode + n.node[sec] = subNode } subNode.add(secs[:length-1]) } @@ -73,6 +78,9 @@ func (n *node) matchSecs(secs []string, fuzzNode bool) bool { if _, ok := n.node[""]; ok { return true } + if _, ok := n.node["**"]; ok { + return true + } if _, ok := n.node["*"]; ok { return !fuzzNode } @@ -85,6 +93,9 @@ func (n *node) matchSecs(secs []string, fuzzNode bool) bool { if n, ok := n.node["*"]; ok { return n.matchSecs(secs[:length-1], true) } + if _, ok := n.node["**"]; ok { + return true + } return false } diff --git a/util/suffix_tree_test.go b/util/suffix_tree_test.go index 96eb810..fd92b91 100644 --- a/util/suffix_tree_test.go +++ b/util/suffix_tree_test.go @@ -30,21 +30,15 @@ func TestNode_Match(t *testing.T) { }, }, { "fuzz1", - NewNodeFromRules(".", "wweir.cc", "*.wweir.cc"), - []test{ - {"wweir.cc", true}, - {"a.wweir.cc", true}, - }, - }, { - "fuzz2", - NewNodeFromRules(".", "a.wweir.cc", "*.wweir.cc"), + NewNodeFromRules(".", "wweir.cc", "a.wweir.cc", "*.wweir.cc"), []test{ {"wweir.cc", true}, {"a.wweir.cc", true}, {"b.wweir.cc", true}, + {"a.b.wweir.cc", false}, }, }, { - "fuzz3", + "fuzz2", NewNodeFromRules(".", "a.*.cc"), []test{ {"wweir.cc", false}, @@ -52,7 +46,7 @@ func TestNode_Match(t *testing.T) { {"b.wweir.cc", false}, }, }, { - "fuzz4", + "fuzz3", NewNodeFromRules(".", "*.*.cc", "iamp.*.*"), []test{ {"wweir.cc", false}, @@ -60,6 +54,16 @@ func TestNode_Match(t *testing.T) { {"b.wweir.cc", true}, {"iamp.wweir.cc", true}, }, + }, { + "fuzz4", + NewNodeFromRules(".", "**.cc", "a.**.com"), + []test{ + {"wweir.cc", true}, + {"a.wweir.cc", true}, + {"a.b.wweir.cc", true}, + {"a.wweir.com", true}, + {"b.wweir.com", false}, + }, }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {