start moving common things into the library

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2019-05-05 00:00:39 -07:00
parent ed570b08ac
commit f437bfec59
3 changed files with 98 additions and 74 deletions

89
connection_handler.go Normal file
View File

@ -0,0 +1,89 @@
// 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 "fmt"
// import "os"
import "bufio"
import "math/rand"
import "net"
import "strconv"
import "strings"
// import "time"
import "log"
// 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(c net.Conn) string {
clientAddr := c.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(c net.Conn) {
ipv6client := GetRemoteAddr(c)
log.Println("Serving to %s as the IPv6 client", ipv6client)
log.Println("Waiting for the client to tell me its name")
netData, err := bufio.NewReader(c).ReadString('\n')
if err != nil {
log.Println(err)
return
}
clientHostname := strings.TrimSpace(netData)
log.Println("Recieved client hostname as:", clientHostname)
dnsRR := Dnstrace(clientHostname, "AAAA")
ipaddr := dns.Field(dnsRR, 1)
log.Println("Client claims to be: ", ipaddr)
log.Println("Serving to IPv6 client:", ipv6client)
if (ipaddr != ipv6client) {
log.Println()
log.Println("DNSSEC ERROR: client IPv6 does not work")
log.Println("DNSSEC ERROR: client IPv6 does not work")
log.Println("DNSSEC ERROR: client IPv6 does not work")
log.Println()
c.Close()
return
}
for {
netData, err := bufio.NewReader(c).ReadString('\n')
if err != nil {
log.Println(err)
return
}
temp := strings.TrimSpace(string(netData))
if temp == "STOP" {
break
}
log.Println("Recieved: ", temp)
result := strconv.Itoa(random()) + "\n"
c.Write([]byte(string(result)))
}
c.Close()
}

View File

@ -1,8 +1,7 @@
package dnssecsocket
// inspired from github.com/rs/dnstrace/main.go // inspired from github.com/rs/dnstrace/main.go
package main
// import "flag"
import "fmt" import "fmt"
import "log" import "log"
import "net" import "net"
@ -35,7 +34,7 @@ func colorize(s interface{}, color int, enabled bool) string {
return fmt.Sprintf("\x1b[%dm%v\x1b[0m", color, s) return fmt.Sprintf("\x1b[%dm%v\x1b[0m", color, s)
} }
func dnstrace(hostname string, qtypestr string) dns.RR { func Dnstrace(hostname string, qtypestr string) dns.RR {
// color := flag.Bool("color", true, "Enable/disable colors") // color := flag.Bool("color", true, "Enable/disable colors")
color := true color := true

View File

@ -8,23 +8,22 @@ package main
// import "fmt" // import "fmt"
// import "os" // import "os"
import "bufio"
import "math/rand" import "math/rand"
import "net" import "net"
import "strconv"
import "strings"
import "time" import "time"
import "log" import "log"
// will try to get this hosts FQDN // will try to get this hosts FQDN
import "github.com/Showmax/go-fqdn" import "github.com/Showmax/go-fqdn"
// this is the king of dns libraries
import "github.com/miekg/dns" import "github.com/miekg/dns"
// this is awesome for debugging
import "github.com/davecgh/go-spew/spew" import "github.com/davecgh/go-spew/spew"
const MIN = 1 // this is our dnssec IPv6 socket library
const MAX = 100 import "git.wit.com/jcarr/dnssecsocket"
const ( const (
CONN_HOST = "localhost" CONN_HOST = "localhost"
@ -37,7 +36,7 @@ func main() {
log.Println("FQDN hostname is", hostname) log.Println("FQDN hostname is", hostname)
// lookup the IP address from DNS // lookup the IP address from DNS
dnsRR := dnstrace(hostname, "AAAA") dnsRR := dnssecsocket.Dnstrace(hostname, "AAAA")
spew.Dump(dnsRR) spew.Dump(dnsRR)
ipaddr := dns.Field(dnsRR, 1) ipaddr := dns.Field(dnsRR, 1)
log.Println("ipaddr", ipaddr) log.Println("ipaddr", ipaddr)
@ -68,69 +67,6 @@ func main() {
} }
// Handle connections in a new goroutine. // Handle connections in a new goroutine.
go handleConnection(conn) go dnssecsocket.HandleConnection(conn)
} }
} }
func random() int {
return rand.Intn(MAX-MIN) + MIN
}
func getRemoteAddr(c net.Conn) string {
clientAddr := c.RemoteAddr().String()
parts := strings.Split(clientAddr, "]")
ipv6 := parts[0]
return ipv6[2:]
}
//
// Handle each connection
// Each client must send it's hostname as the first line
// Then each hostname is verified with DNSSEC
//
func handleConnection(c net.Conn) {
ipv6client := getRemoteAddr(c)
log.Println("Serving to %s as the IPv6 client", ipv6client)
log.Println("Waiting for the client to tell me its name")
netData, err := bufio.NewReader(c).ReadString('\n')
if err != nil {
log.Println(err)
return
}
clientHostname := strings.TrimSpace(netData)
log.Println("Recieved client hostname as:", clientHostname)
dnsRR := dnstrace(clientHostname, "AAAA")
ipaddr := dns.Field(dnsRR, 1)
log.Println("Client claims to be: ", ipaddr)
log.Println("Serving to IPv6 client:", ipv6client)
if (ipaddr != ipv6client) {
log.Println()
log.Println("DNSSEC ERROR: client IPv6 does not work")
log.Println("DNSSEC ERROR: client IPv6 does not work")
log.Println("DNSSEC ERROR: client IPv6 does not work")
log.Println()
c.Close()
return
}
for {
netData, err := bufio.NewReader(c).ReadString('\n')
if err != nil {
log.Println(err)
return
}
temp := strings.TrimSpace(string(netData))
if temp == "STOP" {
break
}
log.Println("Recieved: ", temp)
result := strconv.Itoa(random()) + "\n"
c.Write([]byte(string(result)))
}
c.Close()
}