package parser import ( "bufio" "io" "net" "strings" ) func init() { RegisterDomainsParser(hostsParser{}) } type hostsParser struct{} func (hostsParser) CanHandle(line string) bool { part := strings.Fields(line) return len(part) >= 2 && net.ParseIP(part[0]) != nil } func (hostsParser) ParseDomains(r io.Reader) (domains []string, ignored int, err error) { scanner := bufio.NewScanner(r) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if isComment(line) { continue } part := strings.Fields(line) if len(part) >= 2 && net.ParseIP(part[0]) != nil { domains = append(domains, part[1:]...) continue } ignored++ } if err = scanner.Err(); err != nil { return } return unique(domains), ignored, nil }