github.com/xtls/xray-core@v1.8.12-0.20240518155711-3168d27b0bdb/app/dns/nameserver_fakedns.go (about) 1 package dns 2 3 import ( 4 "context" 5 6 "github.com/xtls/xray-core/common/net" 7 "github.com/xtls/xray-core/core" 8 "github.com/xtls/xray-core/features/dns" 9 ) 10 11 type FakeDNSServer struct { 12 fakeDNSEngine dns.FakeDNSEngine 13 } 14 15 func NewFakeDNSServer() *FakeDNSServer { 16 return &FakeDNSServer{} 17 } 18 19 func (FakeDNSServer) Name() string { 20 return "FakeDNS" 21 } 22 23 func (f *FakeDNSServer) QueryIP(ctx context.Context, domain string, _ net.IP, opt dns.IPOption, _ bool) ([]net.IP, error) { 24 if f.fakeDNSEngine == nil { 25 if err := core.RequireFeatures(ctx, func(fd dns.FakeDNSEngine) { 26 f.fakeDNSEngine = fd 27 }); err != nil { 28 return nil, newError("Unable to locate a fake DNS Engine").Base(err).AtError() 29 } 30 } 31 var ips []net.Address 32 if fkr0, ok := f.fakeDNSEngine.(dns.FakeDNSEngineRev0); ok { 33 ips = fkr0.GetFakeIPForDomain3(domain, opt.IPv4Enable, opt.IPv6Enable) 34 } else { 35 ips = f.fakeDNSEngine.GetFakeIPForDomain(domain) 36 } 37 38 netIP, err := toNetIP(ips) 39 if err != nil { 40 return nil, newError("Unable to convert IP to net ip").Base(err).AtError() 41 } 42 43 newError(f.Name(), " got answer: ", domain, " -> ", ips).AtInfo().WriteToLog() 44 45 if len(netIP) > 0 { 46 return netIP, nil 47 } 48 return nil, dns.ErrEmptyResponse 49 }