Add native protocol service plugins
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled

This commit is contained in:
ZacharyZcR
2026-05-23 15:51:50 +08:00
parent 73cbe803c4
commit 8d30ee334c
16 changed files with 812 additions and 2 deletions
+46
View File
@@ -0,0 +1,46 @@
//go:build plugin_dns || plugin_dnstcp || plugin_modbus || !plugin_selective
package services
import (
"crypto/rand"
"encoding/binary"
"fmt"
"time"
)
func randomUint16() uint16 {
var b [2]byte
if _, err := rand.Read(b[:]); err == nil {
return binary.BigEndian.Uint16(b[:])
}
return uint16(time.Now().UnixNano())
}
func buildDNSRootNSQuery(id uint16) []byte {
query := make([]byte, 17)
binary.BigEndian.PutUint16(query[0:2], id)
binary.BigEndian.PutUint16(query[2:4], 0x0100)
binary.BigEndian.PutUint16(query[4:6], 1)
query[12] = 0x00
binary.BigEndian.PutUint16(query[13:15], 2)
binary.BigEndian.PutUint16(query[15:17], 1)
return query
}
func parseDNSResponse(data []byte, id uint16) (string, bool) {
if len(data) < 12 || binary.BigEndian.Uint16(data[0:2]) != id {
return "", false
}
flags := binary.BigEndian.Uint16(data[2:4])
if flags&0x8000 == 0 {
return "", false
}
rcode := flags & 0x000f
qd := binary.BigEndian.Uint16(data[4:6])
an := binary.BigEndian.Uint16(data[6:8])
ns := binary.BigEndian.Uint16(data[8:10])
ar := binary.BigEndian.Uint16(data[10:12])
return fmt.Sprintf("DNS response rcode=%d qd=%d an=%d ns=%d ar=%d", rcode, qd, an, ns, ar), true
}