// GetHexPorts gets all open ports as hex strings from /proc/net/{tcp,udp} // Its protocol argument can only be one of: "tcp" | "udp" func GetHexPorts(protocol string) (ports []string) { var path string switch strings.ToLower(protocol) { case "tcp": path = "/proc/net/tcp" case "udp": path = "/proc/net/udp" default: log.WithFields(log.Fields{ "protocol": protocol, "valid protocols": "tcp|udp", }).Fatal("Invalid protocol passed to GetHexPorts!") } data := chkutil.FileToString(path) rowSep := regexp.MustCompile(`\n+`) colSep := regexp.MustCompile(`\s+`) table := tabular.SeparateString(rowSep, colSep, data) localAddresses := tabular.GetColumnByHeader("local_address", table) portRe := regexp.MustCompile(`([0-9A-F]{8}):([0-9A-F]{4})`) for _, address := range localAddresses { port := portRe.FindString(address) if port != "" { if len(port) < 10 { log.WithFields(log.Fields{ "port": port, "length": len(port), }).Fatal("Couldn't parse port number in " + path) } portString := string(port[9:]) ports = append(ports, portString) } } return ports }
func (chk PacmanIgnore) Status() (int, string, error) { path := "/etc/pacman.conf" data := chkutil.FileToString(path) re := regexp.MustCompile(`[^#]IgnorePkg\s+=\s+.+`) find := re.FindString(data) var packages []string if find != "" { spl := strings.Split(find, " ") errutil.IndexError("Not enough lines in "+path, 2, spl) packages = spl[2:] // first two are "IgnorePkg" and "=" if tabular.StrIn(chk.pkg, packages) { return errutil.Success() } } msg := "Couldn't find package in IgnorePkg" return errutil.GenericError(msg, chk.pkg, packages) }
// getAptrepos constructs repos from the sources.list file at path. Gives // non-zero URLs func getAptRepos() (repos []repo) { // getAptSources returns all the urls of all apt sources (including source // code repositories getAptSources := func() (urls []string) { otherLists := chkutil.GetFilesWithExtension("/etc/apt/sources.list.d", ".list") sourceLists := append([]string{"/etc/apt/sources.list"}, otherLists...) for _, f := range sourceLists { split := tabular.ProbabalisticSplit(chkutil.FileToString(f)) // filter out comments commentRegex := regexp.MustCompile(`^\s*#`) for _, line := range split { if len(line) > 1 && !(commentRegex.MatchString(line[0])) { urls = append(urls, line[1]) } } } return urls } for _, src := range getAptSources() { repos = append(repos, repo{URL: src}) } return repos }