diff options
| author | Jeff Carr <[email protected]> | 2023-12-20 15:12:26 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2023-12-20 15:12:26 -0600 |
| commit | 379fee6d963fe33b798676fd96955ad1c51a3027 (patch) | |
| tree | 5f559caa405d0fe895e03c78acfe81184732d191 /dnssecsocket/connection_handler.go | |
| parent | 382cc8dd171731cc333dd05b7b0b798340162a32 (diff) | |
rename to go.wit.com/control-panel-dnsv0.2.0
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'dnssecsocket/connection_handler.go')
| -rw-r--r-- | dnssecsocket/connection_handler.go | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/dnssecsocket/connection_handler.go b/dnssecsocket/connection_handler.go new file mode 100644 index 0000000..8ccedaa --- /dev/null +++ b/dnssecsocket/connection_handler.go @@ -0,0 +1,131 @@ +// inspired from: +// https://github.com/mactsouk/opensource.com.git +// and +// https://coderwall.com/p/wohavg/creating-a-simple-tcp-server-in-go + +package dnssecsocket + +import "os" +import "bufio" +import "math/rand" +import "net" +import "strconv" +import "strings" +// import log "github.com/sirupsen/logrus" +// import "github.com/wercker/journalhook" + +import "go.wit.com/shell" + +// will try to get this hosts FQDN +// import "github.com/Showmax/go-fqdn" + +import "github.com/miekg/dns" + +// import "github.com/davecgh/go-spew/spew" + +const MIN = 1 +const MAX = 100 + +func random() int { + return rand.Intn(MAX-MIN) + MIN +} + +func GetRemoteAddr(conn net.TCPConn) string { + clientAddr := conn.RemoteAddr().String() + parts := strings.Split(clientAddr, "]") + ipv6 := parts[0] + return ipv6[1:] +} + +// +// Handle each connection +// Each client must send it's hostname as the first line +// Then each hostname is verified with DNSSEC +// +func HandleConnection(conn *net.TCPConn) { + // Disable journalhook until it builds on Windows + // journalhook.Enable() + + // spew.Dump(conn) + // ipv6client := GetRemoteAddr(c) + ipv6client := conn.RemoteAddr() + log(args.VerboseDnssec, "Serving to %s as the IPv6 client", ipv6client) + + // setup this TCP socket as the "standard input" + // newStdin, _ := bufio.NewReader(conn.File()) + newStdin, _ := conn.File() + newreader := bufio.NewReader(newStdin) + + log(args.VerboseDnssec, "Waiting for the client to tell me its name") + netData, err := newreader.ReadString('\n') + if err != nil { + log(args.VerboseDnssec, err) + return + } + clientHostname := strings.TrimSpace(netData) + log(args.VerboseDnssec, "Recieved client hostname as:", clientHostname) + + dnsRR := Dnstrace(clientHostname, "AAAA") + if (dnsRR == nil) { + log(args.VerboseDnssec, "dnsRR IS NIL") + log(args.VerboseDnssec, "dnsRR IS NIL") + log(args.VerboseDnssec, "dnsRR IS NIL") + conn.Close() + return + } + ipaddr := dns.Field(dnsRR[1], 1) + log(args.VerboseDnssec, "Client claims to be: ", ipaddr) + log(args.VerboseDnssec, "Serving to IPv6 client:", ipv6client) + +/* TODO: figure out how to fix this check + if (ipaddr != ipv6client) { + log(args.VerboseDnssec) + log(args.VerboseDnssec, "DNSSEC ERROR: client IPv6 does not work") + log(args.VerboseDnssec, "DNSSEC ERROR: client IPv6 does not work") + log(args.VerboseDnssec, "DNSSEC ERROR: client IPv6 does not work") + log(args.VerboseDnssec) + conn.Close() + return + } +*/ + + f, _ := conn.File() +// shell.SetStdout(f) +// shell.SpewOn() // turn this on if you want to look at the process exit states + + // send all log() output to systemd journalctl +// shell.UseJournalctl() + + for { + defer shell.SetStdout(os.Stdout) + defer conn.Close() + netData, err := newreader.ReadString('\n') + if err != nil { + log(args.VerboseDnssec, err) + return + } + + temp := strings.TrimSpace(string(netData)) + if temp == "STOP" { + break + } + log(args.VerboseDnssec, "Recieved: ", temp) + + if (temp == "list") { + log(args.VerboseDnssec, "Should run list here") + shell.SetStdout(f) + shell.Run("/root/bin/list.testing.com") + shell.SetStdout(os.Stdout) + } + + if (temp == "cpuinfo") { + log(args.VerboseDnssec, "Should cat /proc/cpuinfo") + shell.SetStdout(f) + shell.Run("cat /proc/cpuinfo") + shell.SetStdout(os.Stdout) + } + + result := strconv.Itoa(random()) + "\n" + conn.Write([]byte(string(result))) + } +} |
