sniffer-agent/session-dealer/mysql/model.go

63 lines
1.3 KiB
Go

package mysql
import (
log "github.com/sirupsen/logrus"
)
type handshakeResponse41 struct {
Capability uint32
Collation uint8
User string
DBName string
Auth []byte
}
// jigsaw record tcp package begin and end seq id
type jigsaw struct {
b int64
e int64
}
type packageWindowCounter struct {
sizeCount map[int]int64
visitCount int64
suggestSize int
}
func newPackageWindowCounter() *packageWindowCounter {
return &packageWindowCounter{
sizeCount: make(map[int]int64, 4),
suggestSize: 512,
}
}
func (pwc *packageWindowCounter) refresh (readSize int, isLastPackage bool) {
if pwc.visitCount > 10000 {
return
}
log.Debugf("WindowCounter: %#v", pwc.sizeCount)
pwc.visitCount += 1
miniMatchSize := maxIPPackageSize
for size := range pwc.sizeCount {
if readSize % size == 0 && miniMatchSize > size {
miniMatchSize = size
}
}
if miniMatchSize < maxIPPackageSize {
pwc.sizeCount[miniMatchSize] = pwc.sizeCount[miniMatchSize] + 1
} else if !isLastPackage {
pwc.sizeCount[readSize] = 1
}
mostFrequentSize := pwc.suggestSize
mostFrequentCount := int64(0)
for size, count := range pwc.sizeCount {
if count > mostFrequentCount {
mostFrequentSize = size
mostFrequentCount = count
}
}
pwc.suggestSize = mostFrequentSize
}