// inspired from: // https://github.com/mactsouk/opensource.com.git // and // https://coderwall.com/p/wohavg/creating-a-simple-tcp-server-in-go package main // import "fmt" // import "os" import "math/rand" import "net" import "time" import "log" // will try to get this hosts FQDN import "github.com/Showmax/go-fqdn" // this is the king of dns libraries import "github.com/miekg/dns" // this is awesome for debugging import "github.com/davecgh/go-spew/spew" // this is our dnssec IPv6 socket library import "git.wit.com/jcarr/dnssecsocket" const ( CONN_HOST = "localhost" CONN_PORT = "3333" CONN_TYPE = "tcp" ) /* go func(c net.Conn) { defer c.Close() io.Copy(os.Stdout, c) }(conn) */ func main() { // redirect all this output to systemd dnssecsocket.UseJournalctl() hostname := fqdn.Get() log.Println("FQDN hostname is", hostname) // lookup the IP address from DNS dnsRR := dnssecsocket.Dnstrace(hostname, "AAAA") spew.Dump(dnsRR) ipaddr := dns.Field(dnsRR, 1) log.Println("ipaddr", ipaddr) listenstr := "[" + ipaddr + "]:" + CONN_PORT log.Println("listenstr", listenstr) myTCPAddr, err := net.ResolveTCPAddr("tcp", listenstr) // // Listen for incoming connections on the IPv6 address only l, err := net.ListenTCP("tcp", myTCPAddr) if err != nil { log.Println("Error listening:", err.Error()) return } // Close the listener when the application closes. defer l.Close() log.Println("Listening on " + listenstr) rand.Seed(time.Now().Unix()) for { // Listen for an incoming connection. conn, err := l.AcceptTCP() if err != nil { log.Println("Error accepting: ", err.Error()) return } log.Println("Accepted new connection from: " + conn.RemoteAddr().String()) // Handle connections in a new goroutine. go dnssecsocket.HandleConnection(conn) } }