implemented dns header structure and serialization

This commit is contained in:
2024-12-19 18:16:07 +03:00
parent 4e8bd6caa7
commit db0e1f9223
+36
View File
@@ -1 +1,37 @@
package dns
import (
"crypto/rand"
"encoding/binary"
"log"
)
type DNSHeader struct {
ID uint16
Flags uint16
QDCount uint16
ANCount uint16
NSCount uint16
ARCount uint16
}
// Serialize converts the DNSHeader into a byte slice
func (h *DNSHeader) Serialize() []byte {
buf := make([]byte, 12)
binary.BigEndian.PutUint16(buf[0:2], h.ID)
binary.BigEndian.PutUint16(buf[2:4], h.Flags)
binary.BigEndian.PutUint16(buf[4:6], h.QDCount)
binary.BigEndian.PutUint16(buf[6:8], h.ARCount)
binary.BigEndian.PutUint16(buf[8:10], h.NSCount)
binary.BigEndian.PutUint16(buf[10:12], h.ARCount)
return buf
}
// genertae a random 16bit identifier
func GenerateRandomID() uint16 {
var id [2]byte
if _, err := rand.Read(id[:]); err != nil {
log.Fatalf("Failed to generate random ID: %v", err)
}
return binary.BigEndian.Uint16(id[:])
}