func (dnsconf *dNSConfig) GetNameServers() (addrs []net.IP, err error) { netshCmd := exec.Command("netsh", "interface", "ip", "show", "dnsservers", dnsconf.iface.Name) outputbuf, err := netshCmd.CombinedOutput() if err != nil { return nil, err } output := bytes.NewBuffer(outputbuf).String() scanner := bufio.NewScanner(strings.NewReader(output)) for scanner.Scan() { line := scanner.Text() scannerLine := bufio.NewScanner(strings.NewReader(line)) scannerLine.Split(bufio.ScanWords) var lineArr []string for scannerLine.Scan() { lineArr = append(lineArr, scannerLine.Text()) } //empty line if len(lineArr) == 0 { continue } for _, addr := range lineArr { err = helpers.CheckIP(addr) if err == nil { addrs = append(addrs, net.ParseIP(addr)) } err = nil } } return addrs, err }
func addNameServers(c *cli.Context) { var addrs []net.IP for _, addr := range c.Args() { err := helpers.CheckIP(addr) if err != nil { log.Fatal(err) } addrs = append(addrs, net.ParseIP(addr)) } err := dnsconf.AddNameServers(addrs) if err != nil { log.Fatal(err) } else { log.Println("DNS servers added successfully") } }
// GetNameServers consume resolv.conf path and returns current host dns servers // addresses. func GetNameServers(filename string) (addrs []net.IP, err error) { file, err := os.Open(filename) if err != nil { return nil, err } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() scannerLine := bufio.NewScanner(strings.NewReader(line)) scannerLine.Split(bufio.ScanWords) var lineArr []string for scannerLine.Scan() { lineArr = append(lineArr, scannerLine.Text()) } //empty line if len(lineArr) == 0 { continue } switch lineArr[0] { case "nameserver": // add one name server if len(lineArr) > 1 { err = helpers.CheckIP(lineArr[1]) if err != nil { return addrs, err } addrs = append(addrs, net.ParseIP(lineArr[1])) } } } return addrs, err }