commit 1c3a28b4e3d5fcd9374467eac2287607a1a8e669 from: Oliver Lowe date: Sat Nov 20 00:32:21 2021 UTC Use fancy bit operations to encode message length Instead of encoding/binary package. Removes that package dependency commit - 2f4ad6437420a56d016b5d1ac5eb61c2a7234254 commit + 1c3a28b4e3d5fcd9374467eac2287607a1a8e669 blob - f44e64273879b3325edd87fc38bac547e6fe57b0 blob + 7fba1263619ee086dd9998b684db9a7948e5949c --- dns.go +++ dns.go @@ -2,7 +2,6 @@ package dns import ( "crypto/tls" - "encoding/binary" "errors" "fmt" "io" @@ -81,8 +80,10 @@ func dnsPacketExchange(b []byte, conn net.Conn) ([]byt func dnsStreamExchange(b []byte, conn net.Conn) ([]byte, error) { // DNS over TCP requires you to prepend the message with a // 2-octet length field. - m := make([]byte, 2+len(b)) - binary.BigEndian.PutUint16(m, uint16(len(b))) + l := len(b) + m := make([]byte, 2+l) + m[0] = byte(l >> 8) + m[1] = byte(l) copy(m[2:], b) if _, err := conn.Write(m); err != nil { return nil, err @@ -92,7 +93,7 @@ func dnsStreamExchange(b []byte, conn net.Conn) ([]byt if _, err := io.ReadFull(conn, b[:2]); err != nil { return nil, fmt.Errorf("read length: %w", err) } - l := int(b[0])<<8 | int(b[1]) + l = int(b[0])<<8 | int(b[1]) if l > len(b) { b = make([]byte, l) }