mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
Add native protocol service plugins
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user