feat: Add support for extra protocol tweaks
Adds support to set protocol tweaks like aa,ad,cd flags to be set when preparing a dns.Messagecli
parent
18078cdb7c
commit
6c3b17ba0d
|
@ -48,6 +48,7 @@ func main() {
|
||||||
f.String("strategy", "all", "Strategy to query nameservers in resolv.conf file (`all`, `random`, `first`)")
|
f.String("strategy", "all", "Strategy to query nameservers in resolv.conf file (`all`, `random`, `first`)")
|
||||||
f.String("tls-hostname", "", "Provide a hostname for doing verification of the certificate if the provided DoT nameserver is an IP")
|
f.String("tls-hostname", "", "Provide a hostname for doing verification of the certificate if the provided DoT nameserver is an IP")
|
||||||
f.Bool("skip-hostname-verification", false, "Skip TLS Hostname Verification")
|
f.Bool("skip-hostname-verification", false, "Skip TLS Hostname Verification")
|
||||||
|
f.StringSliceP("tweaks", "Z", []string{}, "Specify protocol tweaks. Set flags like aa,ad,cd")
|
||||||
|
|
||||||
// Output Options
|
// Output Options
|
||||||
f.BoolP("json", "J", false, "Set the output format as JSON")
|
f.BoolP("json", "J", false, "Set the output format as JSON")
|
||||||
|
@ -112,8 +113,7 @@ func main() {
|
||||||
app.Logger.WithError(err).Fatal("error loading nameservers")
|
app.Logger.WithError(err).Fatal("error loading nameservers")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load Resolvers.
|
ropts := resolvers.Options{
|
||||||
rslvrs, err := resolvers.LoadResolvers(resolvers.Options{
|
|
||||||
Nameservers: app.Nameservers,
|
Nameservers: app.Nameservers,
|
||||||
UseIPv4: app.QueryFlags.UseIPv4,
|
UseIPv4: app.QueryFlags.UseIPv4,
|
||||||
UseIPv6: app.QueryFlags.UseIPv6,
|
UseIPv6: app.QueryFlags.UseIPv6,
|
||||||
|
@ -124,7 +124,19 @@ func main() {
|
||||||
Strategy: app.QueryFlags.Strategy,
|
Strategy: app.QueryFlags.Strategy,
|
||||||
InsecureSkipVerify: app.QueryFlags.InsecureSkipVerify,
|
InsecureSkipVerify: app.QueryFlags.InsecureSkipVerify,
|
||||||
TLSHostname: app.QueryFlags.TLSHostname,
|
TLSHostname: app.QueryFlags.TLSHostname,
|
||||||
})
|
}
|
||||||
|
|
||||||
|
if contains(app.QueryFlags.Tweaks, "aa") {
|
||||||
|
ropts.Authoritative = true
|
||||||
|
}
|
||||||
|
if contains(app.QueryFlags.Tweaks, "ad") {
|
||||||
|
ropts.AuthenticatedData = true
|
||||||
|
}
|
||||||
|
if contains(app.QueryFlags.Tweaks, "cd") {
|
||||||
|
ropts.CheckingDisabled = true
|
||||||
|
}
|
||||||
|
// Load Resolvers.
|
||||||
|
rslvrs, err := resolvers.LoadResolvers(ropts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Logger.WithError(err).Fatal("error loading resolver")
|
app.Logger.WithError(err).Fatal("error loading resolver")
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,10 +19,10 @@ var appHelpTextTemplate = `{{ "NAME" | color "" "heading" }}:
|
||||||
{{.Version | color "red" "" }}
|
{{.Version | color "red" "" }}
|
||||||
|
|
||||||
{{ "EXAMPLES" | color "" "heading" }}:
|
{{ "EXAMPLES" | color "" "heading" }}:
|
||||||
{{ .Name | color "green" "bold" }} {{ "mrkaran.dev" | color "cyan" "" }} Query a domain using defaults.
|
{{ .Name | color "green" "bold" }} {{ "mrkaran.dev" | color "cyan" "" }} {{"\t"}} Query a domain using defaults.
|
||||||
{{ .Name | color "green" "bold" }} {{ "mrkaran.dev CNAME" | color "cyan" "" }} Looks up for a CNAME record.
|
{{ .Name | color "green" "bold" }} {{ "mrkaran.dev CNAME" | color "cyan" "" }} {{"\t"}} Looks up for a CNAME record.
|
||||||
{{ .Name | color "green" "bold" }} {{ "mrkaran.dev MX @9.9.9.9" | color "cyan" "" }} Uses a custom DNS resolver.
|
{{ .Name | color "green" "bold" }} {{ "mrkaran.dev MX @9.9.9.9" | color "cyan" "" }} {{"\t"}} Uses a custom DNS resolver.
|
||||||
{{ .Name | color "green" "bold" }} {{"-q mrkaran.dev -t MX -n 1.1.1.1" | color "yellow" ""}} Using named arguments.
|
{{ .Name | color "green" "bold" }} {{"-q mrkaran.dev -t MX -n 1.1.1.1" | color "yellow" ""}} {{"\t"}} Using named arguments.
|
||||||
|
|
||||||
{{ "Free Form Arguments" | color "" "heading" }}:
|
{{ "Free Form Arguments" | color "" "heading" }}:
|
||||||
Supply hostnames, query types, classes without any flag. For eg:
|
Supply hostnames, query types, classes without any flag. For eg:
|
||||||
|
|
|
@ -33,3 +33,13 @@ func loadUnparsedArgs(args []string) ([]string, []string, []string, []string) {
|
||||||
}
|
}
|
||||||
return ns, qt, qc, qn
|
return ns, qt, qc, qn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// contains is a helper method to check if a paritcular element exists in the slice.
|
||||||
|
func contains(s []string, e string) bool {
|
||||||
|
for _, a := range s {
|
||||||
|
if a == e {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ type QueryFlags struct {
|
||||||
InsecureSkipVerify bool `koanf:"skip-hostname-verification" skip-hostname-verification:"-"`
|
InsecureSkipVerify bool `koanf:"skip-hostname-verification" skip-hostname-verification:"-"`
|
||||||
TLSHostname string `koanf:"tls-hostname" tls-hostname:"-"`
|
TLSHostname string `koanf:"tls-hostname" tls-hostname:"-"`
|
||||||
RetryCount int `koanf:"retry" retry:"-"`
|
RetryCount int `koanf:"retry" retry:"-"`
|
||||||
|
Tweaks []string `koanf:"tweaks" json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nameserver represents the type of Nameserver
|
// Nameserver represents the type of Nameserver
|
||||||
|
|
|
@ -24,7 +24,7 @@ func prepareMessages(q dns.Question, opts Options) []dns.Msg {
|
||||||
Authoritative: opts.Authoritative,
|
Authoritative: opts.Authoritative,
|
||||||
AuthenticatedData: opts.AuthenticatedData,
|
AuthenticatedData: opts.AuthenticatedData,
|
||||||
CheckingDisabled: opts.CheckingDisabled,
|
CheckingDisabled: opts.CheckingDisabled,
|
||||||
RecursionDesired: opts.RecursionDesired,
|
RecursionDesired: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
// It's recommended to only send 1 question for 1 DNS message.
|
// It's recommended to only send 1 question for 1 DNS message.
|
||||||
|
|
Loading…
Reference in New Issue