Browse Source

update fakedns module

pull/15/head
Jason 5 years ago
parent
commit
0bb86d6345
  1. 10
      common/dns/fakedns/middleware.go
  2. 26
      common/dns/fakedns/server.go
  3. 3
      common/dns/fakedns/util.go

10
common/dns/fakedns/middleware.go

@ -5,13 +5,15 @@ import (
"net"
"strings"
trie "github.com/xjasonlyu/tun2socks/common/dns/domain-trie"
D "github.com/miekg/dns"
"github.com/xjasonlyu/tun2socks/common/cache"
trie "github.com/xjasonlyu/tun2socks/common/domain-trie"
"github.com/xjasonlyu/tun2socks/common/fakeip"
)
type handler func(w D.ResponseWriter, r *D.Msg)
func withFakeIP(cache *Cache, pool *Pool) handler {
func withFakeIP(cache *cache.Cache, pool *fakeip.Pool) handler {
return func(w D.ResponseWriter, r *D.Msg) {
q := r.Question[0]
@ -88,7 +90,7 @@ func withHost(hosts *trie.Trie, next handler) handler {
}
}
func strToHosts(str string) *trie.Trie {
func lineToHosts(str string) *trie.Trie {
// trim `'` `"` ` ` char
str = strings.Trim(str, "' \"")
if str == "" {
@ -110,7 +112,7 @@ func strToHosts(str string) *trie.Trie {
return tree
}
func newHandler(hosts *trie.Trie, cache *Cache, pool *Pool) handler {
func newHandler(hosts *trie.Trie, cache *cache.Cache, pool *fakeip.Pool) handler {
if hosts != nil {
return withHost(hosts, withFakeIP(cache, pool))
}

26
common/dns/fakedns/server.go

@ -7,6 +7,8 @@ import (
"time"
D "github.com/miekg/dns"
"github.com/xjasonlyu/tun2socks/common/cache"
"github.com/xjasonlyu/tun2socks/common/fakeip"
)
var (
@ -18,8 +20,7 @@ var (
type Server struct {
*D.Server
p *Pool
c *Cache
c *cache.Cache
h handler
}
@ -65,31 +66,22 @@ func (s *Server) IPToHost(ip net.IP) string {
return strings.TrimRight(fqdn, ".")
}
func (s *Server) IsFakeIP(ip net.IP) bool {
c := ip2uint32(ip)
if c >= s.p.min && c <= s.p.max {
return true
}
return false
}
func NewServer(fakeIPRange, hostsMap string) (*Server, error) {
func NewServer(fakeIPRange, hostsLine string) (*Server, error) {
_, ipnet, err := net.ParseCIDR(fakeIPRange)
if err != nil {
return nil, err
}
pool, err := NewPool(ipnet)
pool, err := fakeip.New(ipnet)
if err != nil {
return nil, err
}
cache := NewCache(cacheDuration)
hosts := strToHosts(hostsMap)
handler := newHandler(hosts, cache, pool)
hosts := lineToHosts(hostsLine)
cacheItem := cache.New(cacheDuration)
handler := newHandler(hosts, cacheItem, pool)
return &Server{
p: pool,
c: cache,
c: cacheItem,
h: handler,
}, nil
}

3
common/dns/fakedns/util.go

@ -6,9 +6,10 @@ import (
"time"
D "github.com/miekg/dns"
"github.com/xjasonlyu/tun2socks/common/cache"
)
func putMsgToCache(c *Cache, key string, msg *D.Msg) {
func putMsgToCache(c *cache.Cache, key string, msg *D.Msg) {
var ttl time.Duration
if len(msg.Answer) != 0 {
ttl = time.Duration(msg.Answer[0].Header().Ttl) * time.Second

Loading…
Cancel
Save