-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathudpserver2.go
52 lines (45 loc) · 926 Bytes
/
udpserver2.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
import (
"log"
"net"
)
func main() {
udpAddr := &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 10053,
}
listener, err := net.ListenUDP("udp", udpAddr)
if err != nil {
log.Fatal(err)
}
log.Println("Now listen")
buf := make([]byte, 512)
for {
l, addr, err := listener.ReadFromUDP(buf)
if err != nil {
log.Fatalln(err)
}
if l <= 12 {
log.Printf("From: %s, Data: %x", addr, buf[:l])
continue
}
// buffer for NAME
tm := make([]byte, 256)
b1 := buf[:11]
b2 := buf[12:l]
// current position in NAME
p := 0
for p < len(b2) && b2[p] != 0 {
// label length
ll := int(b2[p])
p++
tm = append(tm, b2[p:ll+p]...)
tm = append(tm, '.')
log.Printf("p=%3d, label length=%2d, name=%s", p, ll, tm)
p += ll
}
p++
log.Printf("QTYPE=%02X, QCLASS=%02X", b2[p:p+2], b2[p+2:p+4])
log.Printf("From: %s, Data: %012X , %x , %s", addr, b1, b2, tm)
}
}