// PrintResults() is an *optional* method that returns results in a human-readable format. // if matchOnly is set, only results that have at least one match are returned. // If matchOnly is not set, all results are returned, along with errors and statistics. func (r *run) PrintResults(result modules.Result, matchOnly bool) (prints []string, err error) { var ( el elements stats statistics ) err = result.GetElements(&el) if err != nil { panic(err) } if el.Hostname != "" { prints = append(prints, fmt.Sprintf("hostname is %s", el.Hostname)) } for _, addr := range el.Addresses { prints = append(prints, fmt.Sprintf("address is %s", addr)) } for host, addrs := range el.LookedUpHost { for _, addr := range addrs { prints = append(prints, fmt.Sprintf("lookedup host %s has IP %s", host, addr)) } } if matchOnly { return } for _, e := range result.Errors { prints = append(prints, fmt.Sprintf("error: %v", e)) } err = result.GetStatistics(&stats) if err != nil { panic(err) } prints = append(prints, fmt.Sprintf("stat: %d stuff found", stats.StuffFound)) return }
func (r *run) PrintResults(result modules.Result, foundOnly bool) (prints []string, err error) { var ( elem elements stats Statistics ) err = result.GetElements(&elem) if err != nil { panic(err) } err = result.GetStatistics(&stats) if err != nil { panic(err) } for _, x := range elem.Packages { resStr := fmt.Sprintf("pkgmatch name=%v version=%v type=%v", x.Name, x.Version, x.Type) prints = append(prints, resStr) } if !foundOnly { for _, we := range result.Errors { prints = append(prints, we) } stats := fmt.Sprintf("Statistics: runtime %v", stats.ExecRuntime) prints = append(prints, stats) } return }
// PrintResults() returns results in a human-readable format. if foundOnly is set, // only results that have at least one match are returned. // If foundOnly is not set, all results are returned, along with errors and // statistics. func (r *run) PrintResults(result modules.Result, foundOnly bool) (prints []string, err error) { var ( el searchResults stats statistics ) err = result.GetElements(&el) if err != nil { panic(err) } err = result.GetStatistics(&stats) if err != nil { panic(err) } for label, sr := range el { for _, mps := range sr { var out string if mps.Process.Name == "" { if foundOnly { continue } out = fmt.Sprintf("0 match found in search '%s'", label) } else { out = fmt.Sprintf("%s [pid:%.0f] in search '%s'", mps.Process.Name, mps.Process.Pid, label) } if mps.Search.Options.MatchAll { prints = append(prints, out) continue } out += " on checks" // if matchany, print the detail of the checks that matched with the filename for _, v := range mps.Search.Names { out += fmt.Sprintf(" name='%s'", v) } for _, v := range mps.Search.Libraries { out += fmt.Sprintf(" library='%s'", v) } for _, v := range mps.Search.Contents { out += fmt.Sprintf(" content='%s'", v) } for _, v := range mps.Search.Bytes { out += fmt.Sprintf(" byte='%s'", v) } prints = append(prints, out) } } if !foundOnly { for _, e := range stats.Failures { prints = append(prints, fmt.Sprintf("Failure: %v", e)) } for _, e := range result.Errors { prints = append(prints, e) } stat := fmt.Sprintf("Statistics: %.0f processes checked, %.0f matched, %d failures, ran in %s.", stats.ProcessCount, stats.TotalHits, len(stats.Failures), stats.Exectime) prints = append(prints, stat) } return }
func (r *run) PrintResults(result modules.Result, foundOnly bool) (prints []string, err error) { var ( elem ScribeElements stats statistics ) err = result.GetElements(&elem) if err != nil { panic(err) } err = result.GetStatistics(&stats) if err != nil { panic(err) } for _, x := range elem.Results { if elem.HumanOutput { prints = append(prints, x.String()) } else if elem.JSONOutput { prints = append(prints, x.JSON()) } else { for _, y := range x.SingleLineResults() { prints = append(prints, y) } } } if !foundOnly { for _, we := range result.Errors { prints = append(prints, we) } s := fmt.Sprintf("Statistics: runtime %v", stats.ExecRuntime) prints = append(prints, s) } return }
func (r *run) PrintResults(result modules.Result, foundOnly bool) (prints []string, err error) { var ( el elements stats statistics ) err = result.GetElements(&el) if err != nil { return } prints = append(prints, "local time is "+el.LocalTime) if el.HasCheckedDrift { if el.IsWithinDrift { prints = append(prints, "local time is within acceptable drift from NTP servers") } else { prints = append(prints, "local time is out of sync from NTP servers") for _, drift := range el.Drifts { prints = append(prints, drift) } } } // stop here if foundOnly is set, we don't want to see errors and stats if foundOnly { return } for _, e := range result.Errors { prints = append(prints, "error:", e) } err = result.GetStatistics(&stats) if err != nil { panic(err) } prints = append(prints, "stat: execution time was "+stats.ExecTime) for _, ntpstat := range stats.NtpStats { if ntpstat.Reachable { prints = append(prints, "stat: "+ntpstat.Host+" responded in "+ntpstat.Latency+" with time "+ntpstat.Time.UTC().String()+". local time drifts by "+ntpstat.Drift) } else { prints = append(prints, "stat: "+ntpstat.Host+" was unreachable") } } if result.Success { prints = append(prints, fmt.Sprintf("timedrift module has succeeded")) } else { prints = append(prints, fmt.Sprintf("timedrift module has failed")) } return }
func (r *run) PrintResults(result modules.Result, matchOnly bool) (prints []string, err error) { var ( el elements stats statistics ) defer func() { if e := recover(); e != nil { err = fmt.Errorf("PrintResults() -> %v", e) } }() el = *newElements() err = result.GetElements(&el) if err != nil { panic(err) } for val, res := range el.LocalMAC { if matchOnly && len(res) < 1 { continue } for _, el := range res { resStr := fmt.Sprintf("found local mac %s for netstat localmac:'%s'", el.LocalMACAddr, val) resStr += printNamespaceId(el.Namespace) prints = append(prints, resStr) } } for val, res := range el.NeighborMAC { if matchOnly && len(res) < 1 { continue } for _, el := range res { resStr := fmt.Sprintf("found neighbor mac %s %s for netstat neighbormac:'%s'", el.RemoteMACAddr, el.RemoteAddr, val) resStr += printNamespaceId(el.Namespace) prints = append(prints, resStr) } if len(res) == 0 { resStr := fmt.Sprintf("did not find anything for netstat neighbormac:'%s'", val) prints = append(prints, resStr) } } for val, res := range el.LocalIP { if matchOnly && len(res) < 1 { continue } for _, el := range res { resStr := fmt.Sprintf("found local ip %s for netstat localip:'%s'", el.LocalAddr, val) resStr += printNamespaceId(el.Namespace) prints = append(prints, resStr) } if len(res) == 0 { resStr := fmt.Sprintf("did not find anything for netstat localip:'%s'", val) prints = append(prints, resStr) } } for val, res := range el.ConnectedIP { if matchOnly && len(res) < 1 { continue } for _, el := range res { resStr := fmt.Sprintf("found connected tuple %s:%.0f with local tuple %s:%.0f for netstat connectedip:'%s'", el.RemoteAddr, el.RemotePort, el.LocalAddr, el.LocalPort, val) resStr += printNamespaceId(el.Namespace) prints = append(prints, resStr) } if len(res) == 0 { resStr := fmt.Sprintf("did not find anything for netstat connectedip:'%s'", val) prints = append(prints, resStr) } } for val, res := range el.ListeningPort { if matchOnly && len(res) < 1 { continue } for _, el := range res { resStr := fmt.Sprintf("found listening port %.0f for netstat listeningport:'%s'", el.LocalPort, val) resStr += printNamespaceId(el.Namespace) prints = append(prints, resStr) } if len(res) == 0 { resStr := fmt.Sprintf("did not find anything for netstat listeningport:'%s'", val) prints = append(prints, resStr) } } if matchOnly { return } for _, e := range result.Errors { prints = append(prints, fmt.Sprintf("error: %v", e)) } err = result.GetStatistics(&stats) if err != nil { panic(err) } resStr := fmt.Sprintf("Statistics: total hits %.0f examined %.0f items exectime %s", stats.Totalhits, stats.Examined, stats.Exectime) prints = append(prints, resStr) return }