a go dns packet parser

add some basic helper functions for handling dns messages

Changed files
+34
+34
message.go
···
package magna
// Decode decodes a DNS packet.
func (m *Message) Decode(buf []byte) (err error) {
offset, err := m.Header.Decode(buf, 0)
···
return bytes
}
func (m *Message) CreateReply(req *Message) *Message {
m.Header.ID = req.Header.ID
m.Header.QR = true
···
return m
}
···
package magna
+
import (
+
"math/rand"
+
)
+
// Decode decodes a DNS packet.
func (m *Message) Decode(buf []byte) (err error) {
offset, err := m.Header.Decode(buf, 0)
···
return bytes
}
+
func CreateRequest(op OPCode, rd bool) *Message {
+
return &Message{
+
Header: Header{
+
ID: uint16(rand.Intn(65534) + 1),
+
QR: false,
+
OPCode: op,
+
AA: false,
+
TC: false,
+
RD: rd,
+
RA: false,
+
Z: 0,
+
RCode: NOERROR,
+
QDCount: 0,
+
ARCount: 0,
+
NSCount: 0,
+
ANCount: 0,
+
},
+
Question: make([]Question, 0),
+
Answer: make([]ResourceRecord, 0),
+
Additional: make([]ResourceRecord, 0),
+
Authority: make([]ResourceRecord, 0),
+
}
+
}
+
func (m *Message) CreateReply(req *Message) *Message {
m.Header.ID = req.Header.ID
m.Header.QR = true
···
return m
}
+
+
func (m *Message) SetRCode(rc RCode) *Message {
+
m.Header.RCode = rc
+
+
return m
+
}