diff --git a/src/main.go b/src/main.go index c8b2d9e..5a2ce85 100644 --- a/src/main.go +++ b/src/main.go @@ -1,12 +1,10 @@ package main import ( - "encoding/json" "github.com/cunnie/sslip.io/src/xip" "log" + "net" ) -import "net" -import "golang.org/x/net/dns/dnsmessage" func main() { conn, err := net.ListenUDP("udp", &net.UDPAddr{Port: 53}) @@ -14,29 +12,20 @@ func main() { log.Fatal(err.Error()) } - var m dnsmessage.Message - buf := make([]byte, 512) + query := make([]byte, 512) for { - _, _, err := conn.ReadFromUDP(buf) + _, addr, err := conn.ReadFromUDP(query) if err != nil { log.Println(err.Error()) break } - err = m.Unpack(buf) + + response, err := xip.QueryResponse(query) if err != nil { log.Println(err.Error()) break } - for _, question := range m.Questions { - jsonQuestion, err := json.Marshal(question) - if err != nil { - log.Println(err.Error()) - } - answer, _ := xip.NameToA(question.GoString()) - jsonAnswer, err := json.Marshal(answer) - log.Println(jsonQuestion) - log.Println(jsonAnswer) - } + _, err = conn.WriteToUDP(response, addr) } } diff --git a/src/xip/xip.go b/src/xip/xip.go index 9fde092..99ce443 100644 --- a/src/xip/xip.go +++ b/src/xip/xip.go @@ -1,8 +1,10 @@ package xip import ( + "encoding/json" "errors" "golang.org/x/net/dns/dnsmessage" + "log" "net" "regexp" "strings" @@ -12,6 +14,26 @@ import ( var ipv4RE= regexp.MustCompile(`(^|[.-])(((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])[.-]){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))($|[.-])`) var ipv6RE= regexp.MustCompile(`(^|[.-])(([0-9a-fA-F]{1,4}-){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}-){1,7}-|([0-9a-fA-F]{1,4}-){1,6}-[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}-){1,5}(-[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}-){1,4}(-[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}-){1,3}(-[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}-){1,2}(-[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}-((-[0-9a-fA-F]{1,4}){1,6})|-((-[0-9a-fA-F]{1,4}){1,7}|-)|fe80-(-[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|--(ffff(-0{1,4}){0,1}-){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}-){1,4}-((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))($|[.-])`) +func QueryResponse(query []byte) ([]byte, error) { + var m dnsmessage.Message + + err := m.Unpack(query) + if err != nil { + return nil, err + } + for _, question := range m.Questions { + jsonQuestion, err := json.Marshal(question) + if err != nil { + return nil, err + } + answer, _ := NameToA(question.GoString()) + jsonAnswer, err := json.Marshal(answer) + log.Println(jsonQuestion) + log.Println(jsonAnswer) + } + return []byte{0x0}, nil +} + func NameToA (fqdnString string) (dnsmessage.AResource, error) { fqdn:=[]byte(fqdnString) if ! ipv4RE.Match(fqdn) {