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
}
Esempio n. 2
0
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
}