all repos

scratch @ c33ca6e

⭐ me doing recreational ~~drugs~~ programming

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
dns: ch4, 1 month ago
1
package main
2
3
import (
4
	"bytes"
5
	"fmt"
6
	"net"
7
)
8
9
const server = "8.8.8.8:53"
10
11
func Lookup(qname string, qtype QueryType) (Packet, error) {
12
	conn, _ := net.Dial("udp", server)
13
	defer conn.Close()
14
15
	p := Packet{}
16
	p.Header.ID = 6666
17
	p.Header.RecursionDesired = true
18
	p.Questions = append(p.Questions, Question{
19
		Name:  qname,
20
		Type:  qtype,
21
		Class: 1, // IN
22
	})
23
24
	buf := &bytes.Buffer{}
25
	if err := p.Write(buf); err != nil {
26
		return Packet{}, fmt.Errorf("failed to write packet: %v", err)
27
	}
28
29
	if _, err := conn.Write(buf.Bytes()); err != nil {
30
		fmt.Printf("failed to write to connection: %v", err)
31
	}
32
33
	res := make([]byte, 512)
34
	n, err := conn.Read(res)
35
	if err != nil {
36
		fmt.Printf("failed to read from connection: %v", err)
37
	}
38
39
	return ParsePacket(res[:n])
40
}