Feature: process condition for rules
This commit is contained in:
19
rule/base.go
19
rule/base.go
@ -3,6 +3,7 @@ package rules
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
C "github.com/Dreamacro/clash/constant"
|
||||
)
|
||||
@ -24,9 +25,9 @@ func HasNoResolve(params []string) bool {
|
||||
|
||||
func findNetwork(params []string) C.NetWork {
|
||||
for _, p := range params {
|
||||
if p == "tcp" {
|
||||
if strings.EqualFold(p, "tcp") {
|
||||
return C.TCP
|
||||
} else if p == "udp" {
|
||||
} else if strings.EqualFold(p, "udp") {
|
||||
return C.UDP
|
||||
}
|
||||
}
|
||||
@ -51,3 +52,17 @@ func findSourceIPs(params []string) []*net.IPNet {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func findProcessName(params []string) []string {
|
||||
var processNames []string
|
||||
for _, p := range params {
|
||||
if strings.HasPrefix(p, "P:") {
|
||||
processNames = append(processNames, strings.TrimPrefix(p, "P:"))
|
||||
}
|
||||
}
|
||||
|
||||
if len(processNames) > 0 {
|
||||
return processNames
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -13,8 +13,9 @@ func ParseRule(tp, payload, target string, params []string) (C.Rule, error) {
|
||||
)
|
||||
|
||||
ruleExtra := &C.RuleExtra{
|
||||
Network: findNetwork(params),
|
||||
SourceIPs: findSourceIPs(params),
|
||||
Network: findNetwork(params),
|
||||
SourceIPs: findSourceIPs(params),
|
||||
ProcessNames: findProcessName(params),
|
||||
}
|
||||
|
||||
switch tp {
|
||||
|
Reference in New Issue
Block a user