doggo/cmd/lookup.go

40 lines
1.0 KiB
Go
Raw Normal View History

2020-12-10 17:14:04 +01:00
package main
import (
"strings"
"github.com/miekg/dns"
"github.com/urfave/cli/v2"
)
2020-12-12 11:57:13 +01:00
// Lookup sends the DNS queries to the server.
2020-12-10 17:14:04 +01:00
func (hub *Hub) Lookup(c *cli.Context) error {
hub.prepareQuestions()
2020-12-12 11:57:13 +01:00
responses, err := hub.Resolver.Lookup(hub.Questions)
2020-12-10 17:14:04 +01:00
if err != nil {
2020-12-12 15:10:28 +01:00
return err
2020-12-10 17:14:04 +01:00
}
2020-12-12 15:10:28 +01:00
hub.Output(responses)
2020-12-10 17:14:04 +01:00
return nil
}
// prepareQuestions iterates on list of domain names
// and prepare a list of questions
// sent to the server with all possible combinations.
func (hub *Hub) prepareQuestions() {
var question dns.Question
for _, name := range hub.QueryFlags.QNames.Value() {
question.Name = dns.Fqdn(name)
// iterate on a list of query types.
for _, q := range hub.QueryFlags.QTypes.Value() {
question.Qtype = dns.StringToType[strings.ToUpper(q)]
// iterate on a list of query classes.
for _, c := range hub.QueryFlags.QClasses.Value() {
question.Qclass = dns.StringToClass[strings.ToUpper(c)]
// append a new question for each possible pair.
hub.Questions = append(hub.Questions, question)
}
}
}
}