Browse Source

add special wildcard support for domain bypass

pull/282/head
ginuerzh 8 years ago
parent
commit
c11b5ddce8
  1. 16
      bypass.go
  2. 1
      cmd/gost/main.go

16
bypass.go

@ -4,6 +4,7 @@ import (
"bytes"
"fmt"
"net"
"strings"
glob "github.com/gobwas/glob"
)
@ -83,11 +84,16 @@ type domainMatcher struct {
}
// DomainMatcher creates a Matcher for a specific domain pattern,
// the pattern can be a plain domain such as 'example.com'
// or a wildcard such as '*.exmaple.com'.
// the pattern can be a plain domain such as 'example.com',
// a wildcard such as '*.exmaple.com' or a special wildcard '.example.com'.
func DomainMatcher(pattern string) Matcher {
p := pattern
if strings.HasPrefix(pattern, ".") {
p = pattern[1:] // trim the prefix '.'
pattern = "*" + pattern
}
return &domainMatcher{
pattern: pattern,
pattern: p,
glob: glob.MustCompile(pattern),
}
}
@ -96,6 +102,10 @@ func (m *domainMatcher) Match(domain string) bool {
if m == nil || m.glob == nil {
return false
}
if domain == m.pattern {
return true
}
return m.glob.Match(domain)
}

1
cmd/gost/main.go

@ -317,6 +317,7 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
node.Addr = ip
// override the default node address
node.HandshakeOptions = append(handshakeOptions, gost.AddrHandshakeOption(ip))
// One node per IP
nodes = append(nodes, node)
}
if len(ips) == 0 {

Loading…
Cancel
Save