a go dns packet parser
1package magna 2 3import ( 4 // "bytes" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8) 9 10func TestSOADecodeWithCompression(t *testing.T) { 11 input := []byte{0x69, 0x7b, 0x81, 0x83, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0xf, 0x6e, 0x6f, 0x77, 0x61, 0x79, 0x74, 0x68, 0x69, 0x73, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x3, 0x63, 0x6f, 0x6d, 0x0, 0x0, 0x1, 0x0, 0x1, 0xc0, 0x1c, 0x0, 0x6, 0x0, 0x1, 0x0, 0x0, 0x3, 0x84, 0x0, 0x3d, 0x1, 0x61, 0xc, 0x67, 0x74, 0x6c, 0x64, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x3, 0x6e, 0x65, 0x74, 0x0, 0x5, 0x6e, 0x73, 0x74, 0x6c, 0x64, 0xc, 0x76, 0x65, 0x72, 0x69, 0x73, 0x69, 0x67, 0x6e, 0x2d, 0x67, 0x72, 0x73, 0xc0, 0x1c, 0x67, 0xaa, 0xc5, 0x6b, 0x0, 0x0, 0x7, 0x8, 0x0, 0x0, 0x3, 0x84, 0x0, 0x9, 0x3a, 0x80, 0x0, 0x0, 0x3, 0x84} 12 13 msg := &Message{} 14 err := msg.Decode(input) 15 assert.NoError(t, err) 16 17 assert.Equal(t, 1, len(msg.Authority)) 18 19 rr := msg.Authority[0] 20 assert.Equal(t, DNSType(6), rr.RType) 21 assert.Equal(t, DNSClass(1), rr.RClass) 22 assert.Equal(t, uint32(900), rr.TTL) 23 assert.Equal(t, uint16(61), rr.RDLength) 24 25 soa, ok := msg.Authority[0].RData.(*SOA) 26 assert.True(t, ok) 27 28 assert.Equal(t, "a.gtld-servers.net", soa.MName) 29 assert.Equal(t, "nstld.verisign-grs.com", soa.RName) 30 assert.Equal(t, uint32(1739244907), soa.Serial) 31 assert.Equal(t, uint32(1800), soa.Refresh) 32 assert.Equal(t, uint32(900), soa.Retry) 33 assert.Equal(t, uint32(604800), soa.Expire) 34 assert.Equal(t, uint32(900), soa.Minimum) 35 36 encoded := msg.Encode() 37 assert.Equal(t, input, encoded) 38}