all repos

scratch @ master

⭐ me doing recreational ~~drugs~~ programming

scratch/dns-server/main.go (view raw)

1
package main
2
3
import (
4
	"bytes"
5
	_ "embed"
6
	"fmt"
7
	"net"
8
)
9
10
func main() {
11
	qname := "olexsmir.xyz"
12
	server := "8.8.8.8:53"
13
14
	conn, _ := net.Dial("udp", server)
15
	defer conn.Close()
16
17
	p := Packet{}
18
	p.Header.ID = 6666
19
	p.Header.RecursionDesired = true
20
	p.Questions = append(p.Questions, Question{
21
		Name:  qname,
22
		Type:  AType,
23
		Class: 1, // IN
24
	})
25
26
	buf := &bytes.Buffer{}
27
	if err := p.Write(buf); err != nil {
28
		fmt.Printf("failed to write packet: %v", err)
29
	}
30
31
	if _, err := conn.Write(buf.Bytes()); err != nil {
32
		fmt.Printf("failed to write to connection: %v", err)
33
	}
34
35
	res := make([]byte, 512)
36
	n, err := conn.Read(res)
37
	if err != nil {
38
		fmt.Printf("failed to read from connection: %v", err)
39
	}
40
41
	resPack, err := ParsePacket(res[:n])
42
	if err != nil {
43
		fmt.Printf("failed to parse packet: %v", err)
44
	}
45
46
	fmt.Printf("%+v\n", resPack.Header)
47
	for _, q := range resPack.Questions {
48
		fmt.Printf("%+v\n", q)
49
	}
50
	for _, r := range resPack.Answers {
51
		fmt.Printf("%+v\n", r)
52
	}
53
	for _, r := range resPack.Authorities {
54
		fmt.Printf("%+v\n", r)
55
	}
56
	for _, r := range resPack.Resources {
57
		fmt.Printf("%+v\n", r)
58
	}
59
}