in pcap-cli/internal/transformer/json_translator.go [855:946]
func (t *JSONPcapTranslator) translateDNSanswers(
ctx context.Context,
dns *layers.DNS,
size *int,
domain *gabs.Container,
) {
answers, _ := domain.ArrayOfSize(*size, "answers")
for i, answer := range dns.Answers {
a, _ := answers.ObjectI(i)
// Header
a.Set(string(answer.Name), "name")
a.Set(answer.Type.String(), "type")
a.Set(answer.Class.String(), "class")
a.Set(answer.TTL, "ttl")
switch answer.Type {
case layers.DNSTypeA:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L908-L909
a.Set(answer.IP.String(), "A")
case layers.DNSTypeAAAA:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L910-L911
a.Set(answer.IP.String(), "AAAA")
case layers.DNSTypeNS:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L919-L924
a.Set(string(answer.NS), "NS")
case layers.DNSTypeCNAME:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L925-L930
a.Set(string(answer.CNAME), "CNAME")
case layers.DNSTypePTR:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L931-L936
a.Set(string(answer.PTR), "PTR")
case layers.DNSTypeSOA:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L937-L955
soaJSON, _ := a.Object("SOA")
soaJSON.Set(string(answer.SOA.MName), "mname")
soaJSON.Set(string(answer.SOA.RName), "rname")
soaJSON.Set(answer.SOA.Serial, "serial")
soaJSON.Set(answer.SOA.Expire, "expire")
soaJSON.Set(answer.SOA.Refresh, "refresh")
soaJSON.Set(answer.SOA.Retry, "retry")
case layers.DNSTypeSRV:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L973-L984
srvJSON, _ := a.Object("SRV")
srvJSON.SetP(string(answer.SRV.Name), "name")
srvJSON.SetP(answer.SRV.Port, "port")
srvJSON.SetP(answer.SRV.Weight, "weight")
srvJSON.SetP(answer.SRV.Priority, "priority")
case layers.DNSTypeMX:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L956-L965
mxJSON, _ := a.Object("MX")
mxJSON.SetP(string(answer.MX.Name), "name")
mxJSON.SetP(answer.MX.Preference, "preference")
case layers.DNSTypeURI:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L966-L972
uriJSON, _ := a.Object("URI")
uriJSON.SetP(string(answer.URI.Target), "target")
uriJSON.SetP(answer.URI.Priority, "priority")
uriJSON.SetP(answer.URI.Weight, "weight")
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L912-L918
case layers.DNSTypeTXT:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L864-L875
txts, _ := a.ArrayOfSize(len(answer.TXTs))
for i, txt := range answer.TXTs {
txts.SetIndex(string(txt), i)
}
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L985-L990
case layers.DNSTypeOPT:
// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L877-L903
opts, _ := a.ArrayOfSize(len(answer.OPT), "OPT")
for i, opt := range answer.OPT {
o, _ := opts.ObjectI(i)
o.Set(opt.Code.String(), "code")
o.Set(string(opt.Data), "data")
}
}
}
}