system_posix.go 788 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //go:build !windows
  2. package dns
  3. import (
  4. "bufio"
  5. "fmt"
  6. "net/netip"
  7. "os"
  8. "strings"
  9. )
  10. const resolvConf = "/etc/resolv.conf"
  11. func dnsReadConfig() (servers []string, err error) {
  12. file, err := os.Open(resolvConf)
  13. if err != nil {
  14. err = fmt.Errorf("failed to read %s: %w", resolvConf, err)
  15. return
  16. }
  17. defer func() { _ = file.Close() }()
  18. scanner := bufio.NewScanner(file)
  19. for scanner.Scan() {
  20. line := scanner.Text()
  21. if len(line) > 0 && (line[0] == ';' || line[0] == '#') {
  22. // comment.
  23. continue
  24. }
  25. f := strings.Fields(line)
  26. if len(f) < 1 {
  27. continue
  28. }
  29. switch f[0] {
  30. case "nameserver": // add one name server
  31. if len(f) > 1 {
  32. if addr, err := netip.ParseAddr(f[1]); err == nil {
  33. servers = append(servers, addr.String())
  34. }
  35. }
  36. }
  37. }
  38. return
  39. }