diff --git a/modules/events_stream/events_view_zeroconf.go b/modules/events_stream/events_view_zeroconf.go index b8a5deb9..8de9dfc6 100644 --- a/modules/events_stream/events_view_zeroconf.go +++ b/modules/events_stream/events_view_zeroconf.go @@ -31,32 +31,26 @@ func (mod *EventsStream) viewZeroConfEvent(output io.Writer, e session.Event) { } services := make([]string, 0) - for _, q := range event.Query.Questions { - services = append(services, tui.Yellow(string(q.Name))) + for _, q := range event.Services { + services = append(services, tui.Yellow(q)) } - /* + + instPart := "" + if len(event.Instances) > 0 { instances := make([]string, 0) - answers := append(event.Query.Answers, event.Query.Additionals...) - for _, answer := range answers { - if answer.Class == layers.DNSClassIN && answer.Type == layers.DNSTypePTR { - instances = append(instances, tui.Green(string(answer.PTR))) - } else { - instances = append(instances, tui.Green(answer.String())) - } + for _, q := range event.Instances { + instances = append(instances, tui.Green(q)) } + instPart = fmt.Sprintf(" and instances %s", strings.Join(instances, ", ")) + } - advPart := "" - if len(instances) > 0 { - advPart = fmt.Sprintf(" and advertising %s", strings.Join(instances, ", ")) - } - */ - - fmt.Fprintf(output, "[%s] [%s] %s is browsing (%s) for services %s\n", + fmt.Fprintf(output, "[%s] [%s] %s is browsing (%s) for services %s%s\n", e.Time.Format(mod.timeFormat), tui.Green(e.Tag), source, ops.Ternary(event.Query.QR, "RESPONSE", "QUERY"), strings.Join(services, ", "), + instPart, ) } else { fmt.Fprintf(output, "[%s] [%s] %v\n", e.Time.Format(mod.timeFormat), tui.Green(e.Tag), e) diff --git a/modules/zerogod/zerogod_discovery.go b/modules/zerogod/zerogod_discovery.go index 7d0ab634..b85345e3 100644 --- a/modules/zerogod/zerogod_discovery.go +++ b/modules/zerogod/zerogod_discovery.go @@ -23,9 +23,11 @@ type ServiceDiscoveryEvent struct { // an endpoint is browsing for specific services type BrowsingEvent struct { - Source string `json:"source"` - Query layers.DNS `json:"service"` - Endpoint *network.Endpoint `json:"endpoint"` + Source string `json:"source"` + Endpoint *network.Endpoint `json:"endpoint"` + Services []string `json:"services"` + Instances []string `json:"instances"` + Query layers.DNS `json:"query"` } func (mod *ZeroGod) onServiceDiscovered(svc *zeroconf.ServiceEntry) { @@ -250,10 +252,26 @@ func (mod *ZeroGod) onPacket(pkt gopacket.Packet) { return } + services := make([]string, 0) + for _, q := range dns.Questions { + services = append(services, tui.Yellow(string(q.Name))) + } + + instances := make([]string, 0) + for _, answer := range append(append(dns.Answers, dns.Additionals...), dns.Authorities...) { + if answer.Class == layers.DNSClassIN && answer.Type == layers.DNSTypePTR { + instances = append(instances, string(answer.PTR)) + } else { + instances = append(instances, answer.String()) + } + } + event := BrowsingEvent{ - Source: srcIP.String(), - Query: dns, - Endpoint: mod.Session.Lan.GetByIp(srcIP.String()), + Source: srcIP.String(), + Query: dns, + Services: services, + Instances: instances, + Endpoint: mod.Session.Lan.GetByIp(srcIP.String()), } if event.Endpoint == nil {