repositorypackage
0.0.0-20220105004903-b636065205d0
Repository: https://github.com/koomox/gorules.git
Documentation: pkg.go.dev
# README
gorules
golang rules filter
based on flora-kit
Code Example
package main
import (
"fmt"
"github.com/koomox/goproxy/tunnel"
"github.com/koomox/gorules"
)
var (
config = []byte(`
[General]
loglevel = notify
replica = false
skip-Proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local
[Rule]
DOMAIN-KEYWORD,google,PROXY
DOMAIN-KEYWORD,facebook,PROXY
DOMAIN-KEYWORD,youtube,PROXY
DOMAIN-KEYWORD,twitter,PROXY
DOMAIN-SUFFIX,baidu.com,DIRECT
DOMAIN-SUFFIX,google.com,PROXY
DOMAIN-SUFFIX,google.co.jp,PROXY
IP-CIDR,91.108.4.0/22,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
`)
extensions = []byte(`
DOMAIN,scholar.google.com,US
DOMAIN-SUFFIX,.cn,DIRECT
DOMAIN-SUFFIX,.us,PROXY
DOMAIN-SUFFIX,.ca,PROXY
DOMAIN-SUFFIX,netflix.com,NETFLIX
DOMAIN-SUFFIX,nflxext.com,NETFLIX
DOMAIN-SUFFIX,nflxso.net,NETFLIX
DOMAIN-SUFFIX,nflxvideo.net,NETFLIX
DOMAIN-SUFFIX,nflximg.net,NETFLIX
DST-PORT,20,FTP
DST-PORT,21,FTP
DST-PORT,53,DNS
DST-PORT,123,NTP
DST-PORT,80,HTTP
DST-PORT,443,HTTPS
`)
)
func MatchRule(host string, rules gorules.Match) {
addr, _ := tunnel.FromAddr("tcp", host+":443")
r := rules.MatchRule(addr)
fmt.Println(host, r.String(), r.Adapter())
}
func main() {
rules := gorules.New(config)
rules.FromHosts()
// if err := rules.FromGeoIP("GeoLite2-Country.mmdb"); err != nil {
// fmt.Println(err.Error())
// return
// }
rules.FromPort("80", "443")
rules.FromFinal(gorules.ActionDirect)
rules.FromExtensions(extensions)
fmt.Println(rules.MatchBypass("localhost"))
MatchRule("google.com", rules)
MatchRule("scholar.google.com", rules)
MatchRule("github.com", rules)
MatchRule("china.com.cn", rules)
MatchRule("netflix.com", rules)
MatchRule("pinterest.ca", rules)
rules.SetHosts("0.0.0.0", "activate.adobe.com")
fmt.Println(rules.MatchHosts("activate.adobe.com"))
fmt.Println(rules.MatchPort("443"))
}
License
GPL v3.0