nameserver.go 633 B

1234567891011121314151617181920212223242526272829303132333435
  1. package dns
  2. import (
  3. "context"
  4. "v2ray.com/core/common/net"
  5. )
  6. type NameServerInterface interface {
  7. QueryIP(ctx context.Context, domain string) ([]net.IP, error)
  8. }
  9. type localNameServer struct {
  10. resolver net.Resolver
  11. }
  12. func (s *localNameServer) QueryIP(ctx context.Context, domain string) ([]net.IP, error) {
  13. ipAddr, err := s.resolver.LookupIPAddr(ctx, domain)
  14. if err != nil {
  15. return nil, err
  16. }
  17. var ips []net.IP
  18. for _, addr := range ipAddr {
  19. ips = append(ips, addr.IP)
  20. }
  21. return ips, nil
  22. }
  23. func NewLocalNameServer() *localNameServer {
  24. return &localNameServer{
  25. resolver: net.Resolver{
  26. PreferGo: true,
  27. },
  28. }
  29. }