summaryrefslogtreecommitdiff
path: root/dns.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-12-20 03:13:43 -0600
committerJeff Carr <[email protected]>2023-12-20 03:13:43 -0600
commit382cc8dd171731cc333dd05b7b0b798340162a32 (patch)
tree946e99e434183b3eb1272180799c3678f5c7e037 /dns.go
parentbbf96ee7fa67a6d50ea1d1b3a23a3f44f136a30e (diff)
make a cloudflare packagev0.1.2
move cloudflare stuff to a package display cloudflare API values dns protobuf example sort output, but gocli formatting is bad cloudflare window can be closed first time success pushing AAAA records for my box enable a cloudflare button RFC 8482. DNS servers we use should respond to ANY We should support ANY requests via DNS as long as we enforce TCP over UDP populate the API provider domain NS record changes are tracked check hostname OS configuration detect domain name changes lookup of NS records for my domain name button to investigate port 53 daemon start dns resolver detection and debugging measure dns resolution speed sort todo items Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'dns.go')
-rw-r--r--dns.go62
1 files changed, 61 insertions, 1 deletions
diff --git a/dns.go b/dns.go
index 2bb4232..8afbf26 100644
--- a/dns.go
+++ b/dns.go
@@ -7,6 +7,9 @@ package main
import (
"log"
"net"
+ "strings"
+
+ "git.wit.org/wit/shell"
)
/*
@@ -24,7 +27,7 @@ func (h *Host) verifyETC() bool {
func (h *Host) updateIPs(host string) {
ips, err := net.LookupIP(host)
if err != nil {
- log.Println(logError, "updateIPs failed", err)
+ debug(LogError, "updateIPs failed", err)
}
for _, ip := range ips {
log.Println(host, ip)
@@ -71,3 +74,60 @@ func (h *Host) checkDNS() {
log.Println(args.VerboseDNS, "IPv6 is broken. Need to fix it here.")
}
}
+
+// nsLookup performs an NS lookup on the given domain name.
+func lookupNS(domain string) {
+ var domains string
+
+ nsRecords, err := net.LookupNS(domain)
+ if err != nil {
+ return
+ }
+
+ var servers []string
+ for _, ns := range nsRecords {
+ servers = append(servers, ns.Host)
+ }
+
+ // checks to see if the NS records change
+ for _, server := range servers {
+ server = strings.TrimRight(server, ".")
+ if (me.nsmap[server] != domain) {
+ debug(LogChange, "lookupNS() domain", domain, "has NS", server)
+ me.nsmap[server] = domain
+ domains += server + "\n"
+ }
+ }
+
+ var tmp string
+ // checks to see if the NS records change
+ for s, d := range me.nsmap {
+ debug(LogChange, "lookupNS() domain =", d, "server =", s)
+ if (domain == d) {
+ tmp += s + "\n"
+ // figure out the provider (google, cloudflare, etc)
+ setProvider(s)
+ }
+ }
+ tmp = shell.Chomp(tmp)
+
+ if (tmp != me.NSrr.S) {
+ me.changed = true
+ debug(LogChange, "lookupNS() setting me.NSrr =", tmp)
+ me.NSrr.SetText(tmp)
+ }
+}
+
+// getDomain returns the second-to-last part of a domain name.
+func setProvider(hostname string) {
+ var provider string = ""
+ parts := strings.Split(hostname, ".")
+ if len(parts) >= 2 {
+ provider = parts[len(parts)-2]
+ }
+ if (me.DnsAPI.S != provider) {
+ me.changed = true
+ debug(LogChange, "setProvider() changed to =", provider)
+ me.DnsAPI.SetText(provider)
+ }
+}