Skip to content

Commit 8b09db5

Browse files
author
adlyq
committed
fix: Rule-Set中不解析DNS
feat: RULE-SET支持no-resolve
1 parent b562360 commit 8b09db5

File tree

6 files changed

+18
-21
lines changed

6 files changed

+18
-21
lines changed

component/sniffer/dispatcher.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,13 @@ func (sd *SnifferDispatcher) sniffDomain(conn *CN.BufferedConn, metadata *C.Meta
117117

118118
host, err := sniffer.SniffTCP(bytes)
119119
if err != nil {
120-
log.Debugln("[Sniffer] [%s] Sniff data failed %s", sniffer.Protocol(), metadata.DstIP)
120+
//log.Debugln("[Sniffer] [%s] Sniff data failed %s", sniffer.Protocol(), metadata.DstIP)
121121
continue
122122
}
123123

124124
_, err = netip.ParseAddr(host)
125125
if err == nil {
126-
log.Debugln("[Sniffer] [%s] Sniff data failed %s", sniffer.Protocol(), metadata.DstIP)
126+
//log.Debugln("[Sniffer] [%s] Sniff data failed %s", sniffer.Protocol(), metadata.DstIP)
127127
continue
128128
}
129129

rule/logic/common.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ func parseRule(tp, payload string, params []string) (C.Rule, error) {
102102
case "PROCESS-PATH":
103103
parsed, parseErr = RC.NewProcess(payload, "", false)
104104
case "RULE-SET":
105-
parsed, parseErr = provider.NewRuleSet(payload, "")
105+
noResolve := RC.HasNoResolve(params)
106+
parsed, parseErr = provider.NewRuleSet(payload, "", noResolve)
106107
case "NOT":
107108
parsed, parseErr = NewNOT(payload, "")
108109
case "AND":

rule/parser.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ func ParseRule(tp, payload, target string, params []string) (C.Rule, error) {
5050
case "NOT":
5151
parsed, parseErr = logic.NewNOT(payload, target)
5252
case "RULE-SET":
53-
parsed, parseErr = RP.NewRuleSet(payload, target)
53+
noResolve := RC.HasNoResolve(params)
54+
parsed, parseErr = RP.NewRuleSet(payload, target, noResolve)
5455
case "MATCH":
5556
parsed = RC.NewMatch(target)
5657
default:

rule/provider/classical_strategy.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,20 @@ func (c *classicalStrategy) ShouldResolveIP() bool {
3030
}
3131

3232
func (c *classicalStrategy) OnUpdate(rules []string) {
33-
var classicalRules []C.Rule
34-
shouldResolveIP := false
35-
count := 0
3633
for _, rawRule := range rules {
3734
ruleType, rule, params := ruleParse(rawRule)
3835
r, err := parseRule(ruleType, rule, "", params)
3936
if err != nil {
4037
log.Warnln("parse rule error:[%s]", err.Error())
4138
} else {
42-
if !shouldResolveIP {
43-
shouldResolveIP = shouldResolveIP || r.ShouldResolveIP()
39+
if !c.shouldResolveIP {
40+
c.shouldResolveIP = r.ShouldResolveIP()
4441
}
4542

46-
classicalRules = append(classicalRules, r)
47-
count++
43+
c.rules = append(c.rules, r)
44+
c.count++
4845
}
4946
}
50-
51-
c.rules = classicalRules
52-
c.count = count
5347
}
5448

5549
func NewClassicalStrategy() *classicalStrategy {

rule/provider/domain_strategy.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import (
88
)
99

1010
type domainStrategy struct {
11-
shouldResolveIP bool
12-
count int
13-
domainRules *trie.DomainTrie[bool]
11+
count int
12+
domainRules *trie.DomainTrie[bool]
1413
}
1514

1615
func (d *domainStrategy) Match(metadata *C.Metadata) bool {
@@ -22,7 +21,7 @@ func (d *domainStrategy) Count() int {
2221
}
2322

2423
func (d *domainStrategy) ShouldResolveIP() bool {
25-
return d.shouldResolveIP
24+
return false
2625
}
2726

2827
func (d *domainStrategy) OnUpdate(rules []string) {
@@ -55,5 +54,5 @@ func ruleParse(ruleRaw string) (string, string, []string) {
5554
}
5655

5756
func NewDomainStrategy() *domainStrategy {
58-
return &domainStrategy{shouldResolveIP: false}
57+
return &domainStrategy{}
5958
}

rule/provider/rule_set.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ type RuleSet struct {
1212
ruleProviderName string
1313
adapter string
1414
ruleProvider P.RuleProvider
15+
noResolveIP bool
1516
}
1617

1718
func (rs *RuleSet) ShouldFindProcess() bool {
@@ -35,7 +36,7 @@ func (rs *RuleSet) Payload() string {
3536
}
3637

3738
func (rs *RuleSet) ShouldResolveIP() bool {
38-
return rs.getProviders().ShouldResolveIP()
39+
return !rs.noResolveIP && rs.getProviders().ShouldResolveIP()
3940
}
4041
func (rs *RuleSet) getProviders() P.RuleProvider {
4142
if rs.ruleProvider == nil {
@@ -46,7 +47,7 @@ func (rs *RuleSet) getProviders() P.RuleProvider {
4647
return rs.ruleProvider
4748
}
4849

49-
func NewRuleSet(ruleProviderName string, adapter string) (*RuleSet, error) {
50+
func NewRuleSet(ruleProviderName string, adapter string, noResolveIP bool) (*RuleSet, error) {
5051
rp, ok := RuleProviders()[ruleProviderName]
5152
if !ok {
5253
return nil, fmt.Errorf("rule set %s not found", ruleProviderName)
@@ -56,5 +57,6 @@ func NewRuleSet(ruleProviderName string, adapter string) (*RuleSet, error) {
5657
ruleProviderName: ruleProviderName,
5758
adapter: adapter,
5859
ruleProvider: rp,
60+
noResolveIP: noResolveIP,
5961
}, nil
6062
}

0 commit comments

Comments
 (0)