compiles. add resolverBox
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
7fce9bba75
commit
b7db74c779
39
digStatus.go
39
digStatus.go
|
@ -416,45 +416,6 @@ func (ds *digStatus) makeDnsStatusGrid() {
|
|||
grid.Pad()
|
||||
}
|
||||
|
||||
// dnsLookup performs a DNS lookup for the specified record type (e.g., "TXT", "AAAA") for a given domain.
|
||||
func dnsUdpLookup(server string, domain string, recordType uint16) ([]string, error) {
|
||||
var records []string
|
||||
|
||||
c := new(dns.Client)
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(dns.Fqdn(domain), recordType)
|
||||
r, _, err := c.Exchange(m, server) // If server = "1.1.1.1:53" then use Cloudflare's DNS server
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, ans := range r.Answer {
|
||||
records = append(records, ans.String())
|
||||
}
|
||||
|
||||
return records, nil
|
||||
}
|
||||
|
||||
func dnsTcpLookup(server string, domain string, recordType uint16) ([]string, error) {
|
||||
var records []string
|
||||
|
||||
c := new(dns.Client)
|
||||
c.Net = "tcp" // Specify to use TCP for the query
|
||||
c.Timeout = time.Second * 5 // Set a 5-second timeout
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(dns.Fqdn(domain), recordType)
|
||||
r, _, err := c.Exchange(m, server) // If server = "1.1.1.1:53" then use Cloudflare's DNS server
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, ans := range r.Answer {
|
||||
records = append(records, ans.String())
|
||||
}
|
||||
|
||||
return records, nil
|
||||
}
|
||||
|
||||
func (ds *digStatus) checkLookupDoH(hostname string) bool {
|
||||
var status bool = false
|
||||
|
||||
|
|
|
@ -0,0 +1,209 @@
|
|||
/*
|
||||
Performs DNS queries on TCP and UDP
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
"strconv"
|
||||
"reflect"
|
||||
|
||||
"go.wit.com/log"
|
||||
"go.wit.com/gui/gui"
|
||||
"go.wit.com/gui/gadgets"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
type resolverStatus struct {
|
||||
title string
|
||||
server string // The DNS server. Example: "127.0.0.1:53" or "1.1.1.1:53"
|
||||
hostname string // the hostname to lookup. Example: "www.google.com" or "go.wit.com"
|
||||
|
||||
parent *gui.Node
|
||||
group *gui.Node
|
||||
grid *gui.Node
|
||||
|
||||
// DNS setup options
|
||||
udpA *gui.Node
|
||||
tcpA *gui.Node
|
||||
udpAAAA *gui.Node
|
||||
tcpAAAA *gui.Node
|
||||
|
||||
// show the display
|
||||
aFail *gui.Node
|
||||
aSuccess *gui.Node
|
||||
aaaaFail *gui.Node
|
||||
aaaaSuccess *gui.Node
|
||||
|
||||
// interger counters
|
||||
aFailc int
|
||||
aSuccessc int
|
||||
aaaaFailc int
|
||||
aaaaSuccessc int
|
||||
}
|
||||
|
||||
func (rs *resolverStatus) set(a any, s string) {
|
||||
if a == nil {
|
||||
return
|
||||
}
|
||||
var n *gui.Node
|
||||
if reflect.TypeOf(a) == reflect.TypeOf(n) {
|
||||
n = a.(*gui.Node)
|
||||
n.SetText(s)
|
||||
return
|
||||
}
|
||||
var ol *gadgets.OneLiner
|
||||
if reflect.TypeOf(a) == reflect.TypeOf(ol) {
|
||||
ol = a.(*gadgets.OneLiner)
|
||||
ol.Set(s)
|
||||
return
|
||||
}
|
||||
log.Warn("unknown type TypeOf(a) =", reflect.TypeOf(a), "a =", a)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// Makes a DNS Status Grid
|
||||
func NewResolverStatus(p *gui.Node, title string, server string, hostname string) *resolverStatus {
|
||||
var rs *resolverStatus
|
||||
rs = new(resolverStatus)
|
||||
rs.parent = p
|
||||
rs.group = p.NewGroup(server + " " + title + " lookup")
|
||||
rs.grid = rs.group.NewGrid("LookupStatus", 5, 2)
|
||||
|
||||
rs.server = server
|
||||
rs.hostname = hostname
|
||||
|
||||
rs.grid.NewLabel("")
|
||||
rs.grid.NewLabel("UDP")
|
||||
rs.grid.NewLabel("TCP")
|
||||
rs.grid.NewLabel("Success")
|
||||
rs.grid.NewLabel("Fail")
|
||||
|
||||
rs.grid.NewLabel("A")
|
||||
rs.udpA = rs.grid.NewLabel("?")
|
||||
rs.tcpA = rs.grid.NewLabel("?")
|
||||
rs.aSuccess = rs.grid.NewLabel("?")
|
||||
rs.aFail = rs.grid.NewLabel("?")
|
||||
|
||||
rs.grid.NewLabel("AAAA")
|
||||
rs.udpAAAA = rs.grid.NewLabel("?")
|
||||
rs.tcpAAAA = rs.grid.NewLabel("?")
|
||||
rs.aaaaSuccess = rs.grid.NewLabel("?")
|
||||
rs.aaaaFail = rs.grid.NewLabel("?")
|
||||
|
||||
rs.group.Margin()
|
||||
rs.grid.Margin()
|
||||
rs.group.Pad()
|
||||
rs.grid.Pad()
|
||||
|
||||
return rs
|
||||
}
|
||||
|
||||
// special thanks to the Element Hotel wifi in Philidelphia that allowed me to
|
||||
// easily debug this code since the internet connection here blocks port 53 traffic
|
||||
func (rs *resolverStatus) update() (bool, bool) {
|
||||
var results []string
|
||||
var a bool = false
|
||||
var aaaa bool = false
|
||||
|
||||
log.Log(DNS, "resolverStatus.update() For server", rs.server, "on", rs.hostname)
|
||||
results, _ = dnsUdpLookup(rs.server, rs.hostname, dns.TypeA)
|
||||
log.Log(DNS, "resolverStatus.update() UDP type A =", results)
|
||||
|
||||
if (len(results) == 0) {
|
||||
rs.set(rs.udpA, "BROKEN")
|
||||
rs.aFailc += 1
|
||||
} else {
|
||||
rs.set(rs.udpA, "WORKING")
|
||||
rs.aSuccessc += 1
|
||||
a = true
|
||||
}
|
||||
|
||||
results, _ = dnsTcpLookup(rs.server, rs.hostname, dns.TypeA)
|
||||
log.Log(DNS, "resolverStatus.update() TCP type A =", results)
|
||||
|
||||
if (len(results) == 0) {
|
||||
rs.set(rs.tcpA, "BROKEN")
|
||||
rs.aFailc += 1
|
||||
} else {
|
||||
me.digStatus.set(rs.tcpA, "WORKING")
|
||||
rs.aSuccessc += 1
|
||||
a = true
|
||||
}
|
||||
|
||||
me.digStatus.set(rs.aFail, strconv.Itoa(rs.aFailc))
|
||||
me.digStatus.set(rs.aSuccess,strconv.Itoa(rs.aSuccessc))
|
||||
|
||||
results, _ = dnsUdpLookup(rs.server, rs.hostname, dns.TypeAAAA)
|
||||
log.Log(DNS, "resolverStatus.update() UDP type AAAA =", results)
|
||||
|
||||
if (len(results) == 0) {
|
||||
me.digStatus.set(rs.udpAAAA, "BROKEN")
|
||||
rs.aaaaFailc += 1
|
||||
me.digStatus.set(rs.aaaaFail, strconv.Itoa(rs.aaaaFailc))
|
||||
} else {
|
||||
me.digStatus.set(rs.udpAAAA, "WORKING")
|
||||
rs.aaaaSuccessc += 1
|
||||
aaaa = true
|
||||
}
|
||||
|
||||
results, _ = dnsTcpLookup(rs.server, rs.hostname, dns.TypeAAAA)
|
||||
log.Log(DNS, "resolverStatus.update() UDP type AAAA =", results)
|
||||
|
||||
if (len(results) == 0) {
|
||||
me.digStatus.set(rs.tcpAAAA, "BROKEN")
|
||||
rs.aaaaFailc += 1
|
||||
me.digStatus.set(rs.aaaaFail, strconv.Itoa(rs.aaaaFailc))
|
||||
} else {
|
||||
me.digStatus.set(rs.tcpAAAA, "WORKING")
|
||||
rs.aaaaSuccessc += 1
|
||||
aaaa = true
|
||||
}
|
||||
|
||||
me.digStatus.set(rs.aaaaFail, strconv.Itoa(rs.aaaaFailc))
|
||||
me.digStatus.set(rs.aaaaSuccess,strconv.Itoa(rs.aaaaSuccessc))
|
||||
|
||||
return a, aaaa
|
||||
}
|
||||
|
||||
// dnsLookup performs a DNS lookup for the specified record type (e.g., "TXT", "AAAA") for a given domain.
|
||||
func dnsUdpLookup(server string, domain string, recordType uint16) ([]string, error) {
|
||||
var records []string
|
||||
|
||||
c := new(dns.Client)
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(dns.Fqdn(domain), recordType)
|
||||
r, _, err := c.Exchange(m, server) // If server = "1.1.1.1:53" then use Cloudflare's DNS server
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, ans := range r.Answer {
|
||||
records = append(records, ans.String())
|
||||
}
|
||||
|
||||
return records, nil
|
||||
}
|
||||
|
||||
func dnsTcpLookup(server string, domain string, recordType uint16) ([]string, error) {
|
||||
var records []string
|
||||
|
||||
c := new(dns.Client)
|
||||
c.Net = "tcp" // Specify to use TCP for the query
|
||||
c.Timeout = time.Second * 5 // Set a 5-second timeout
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(dns.Fqdn(domain), recordType)
|
||||
r, _, err := c.Exchange(m, server) // If server = "1.1.1.1:53" then use Cloudflare's DNS server
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, ans := range r.Answer {
|
||||
records = append(records, ans.String())
|
||||
}
|
||||
|
||||
return records, nil
|
||||
}
|
Loading…
Reference in New Issue