Feature: add source ipcidr condition for all rules
This commit is contained in:
24
rule/base.go
24
rule/base.go
@ -2,6 +2,8 @@ package rules
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
C "github.com/Dreamacro/clash/constant"
|
||||
)
|
||||
@ -14,6 +16,7 @@ var (
|
||||
|
||||
func HasNoResolve(params []string) bool {
|
||||
for _, p := range params {
|
||||
p = strings.Trim(p, " ")
|
||||
if p == noResolve {
|
||||
return true
|
||||
}
|
||||
@ -23,6 +26,7 @@ func HasNoResolve(params []string) bool {
|
||||
|
||||
func findNetwork(params []string) C.NetWork {
|
||||
for _, p := range params {
|
||||
p = strings.Trim(p, " ")
|
||||
if p == "tcp" {
|
||||
return C.TCP
|
||||
} else if p == "udp" {
|
||||
@ -31,3 +35,23 @@ func findNetwork(params []string) C.NetWork {
|
||||
}
|
||||
return C.ALLNet
|
||||
}
|
||||
|
||||
func findSourceIPs(params []string) []*net.IPNet {
|
||||
var ips []*net.IPNet
|
||||
for _, p := range params {
|
||||
p = strings.Trim(p, " ")
|
||||
if p == noResolve || len(p) < 7 {
|
||||
continue
|
||||
}
|
||||
_, ipnet, err := net.ParseCIDR(p)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
ips = append(ips, ipnet)
|
||||
}
|
||||
|
||||
if len(ips) > 0 {
|
||||
return ips
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user