diff options
| author | OldDrake <[email protected]> | 2022-11-24 16:02:53 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-11-24 16:02:53 +0800 |
| commit | b21fc1d0ec252c1ac8c09d98f37db4a3fa2c6112 (patch) | |
| tree | 985c5ae518c9964662880aa4ea8e0bcf9c56bbde | |
| parent | aeeb256942149388bb4e65bd2dc9685fe462e9db (diff) | |
Add files via upload
| -rw-r--r-- | echodns.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/echodns.go b/echodns.go new file mode 100644 index 0000000..64f1a3e --- /dev/null +++ b/echodns.go @@ -0,0 +1,56 @@ +package main
+
+import (
+ _ "fmt"
+ "net"
+ "strings"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+func serveDNS(u *net.UDPConn, clientaddr net.Addr, request *layers.DNS) {
+ replyMess := request
+ var dnsAnswer layers.DNSResourceRecord
+ dnsAnswer.Type = layers.DNSTypeA
+ if request == nil || request.Questions == nil || len(request.Questions) == 0 {
+ return
+ } else {
+ dnsAnswer.Name = []byte(request.Questions[0].Name)
+ }
+ //fmt.Println(clientaddr.String())
+ dnsAnswer.Class = layers.DNSClassIN
+ replyMess.QR = true
+ replyMess.ANCount = 1
+ replyMess.OpCode = layers.DNSOpCodeQuery
+ replyMess.AA = true
+ dnsAnswer.IP = net.ParseIP(strings.Split(clientaddr.String(), ":")[0])
+ dnsAnswer.TTL = 1000
+ replyMess.Answers = append(replyMess.Answers, dnsAnswer)
+ replyMess.ResponseCode = layers.DNSResponseCodeNoErr
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ err := replyMess.SerializeTo(buf, opts)
+ if err != nil {
+ panic(err)
+ }
+ u.WriteTo(buf.Bytes(), clientaddr)
+}
+
+func main() {
+ addr := net.UDPAddr{
+ Port: 53,
+ IP: net.ParseIP("localhost.localdomain"), //localhost
+ }
+ u, _ := net.ListenUDP("udp", &addr)
+
+ for {
+ tmp := make([]byte, 1024)
+ _, addr, _ := u.ReadFrom(tmp)
+ clientaddr := addr
+ packet := gopacket.NewPacket(tmp, layers.LayerTypeDNS, gopacket.Default)
+ dnsPacket := packet.Layer(layers.LayerTypeDNS)
+ tcp, _ := dnsPacket.(*layers.DNS)
+ serveDNS(u, clientaddr, tcp)
+ }
+}
|
