deal all auth packet

This commit is contained in:
hebo
2019-11-12 18:34:41 +08:00
parent 2b42cd4b3a
commit 1b0d2c8e91
3 changed files with 25 additions and 11 deletions

View File

@@ -97,7 +97,6 @@ func (nc *networkCard) Listen() (receiver chan model.QueryPiece) {
return nc.receiver
}
// Listen get a connection.
func (nc *networkCard) listenNormal() {
go func() {
@@ -112,7 +111,7 @@ func (nc *networkCard) listenNormal() {
// capture packets according to a certain probability
capturePacketRate := communicator.GetTCPCapturePacketRate()
if capturePacketRate <= 0 {
time.Sleep(time.Second*1)
time.Sleep(time.Second * 1)
aliveCounter += 1
if aliveCounter >= checkCount {
aliveCounter = 0
@@ -124,7 +123,7 @@ func (nc *networkCard) listenNormal() {
data, ci, err = handler.ZeroCopyReadPacketData()
if err != nil {
log.Error(err.Error())
time.Sleep(time.Second*3)
time.Sleep(time.Second * 3)
continue
}
@@ -135,7 +134,10 @@ func (nc *networkCard) listenNormal() {
// send FIN tcp packet to avoid not complete session cannot be released
tcpPkt := packet.TransportLayer().(*layers.TCP)
if tcpPkt.FIN {
payLoad := tcpPkt.Payload
// deal FIN packet
// deal auth packet
if tcpPkt.FIN || (len(payLoad) >= 5 && sd.IsAuthPacket(payLoad[4])) {
nc.parseTCPPackage(packet)
continue
}
@@ -274,4 +276,3 @@ func readToServerPackage(
return
}

View File

@@ -24,3 +24,12 @@ func CheckParams() {
mysql.CheckParams()
}
}
func IsAuthPacket(val byte) bool {
switch serviceType {
case ServiceTypeMysql:
return mysql.IsAuthPacket(val)
default:
return mysql.IsAuthPacket(val)
}
}

View File

@@ -144,7 +144,7 @@ func (ms *MysqlSession) readFromClient(seqID int64, bytes []byte) {
if ms.expectReceiveSize == -1 {
// ignore invalid head package
if len(bytes) <= 4{
if len(bytes) <= 4 {
return
}
@@ -208,6 +208,10 @@ func (ms *MysqlSession) readFromClient(seqID int64, bytes []byte) {
// ms.expectReceiveSize = ms.expectReceiveSize - int(contentSize)
}
func IsAuthPacket(val byte) bool {
return val > 32
}
func (ms *MysqlSession) GenerateQueryPiece() (qp model.QueryPiece) {
defer ms.clear()
@@ -227,7 +231,7 @@ func (ms *MysqlSession) GenerateQueryPiece() (qp model.QueryPiece) {
var mqp *model.PooledMysqlQueryPiece
var querySQLInBytes []byte
if ms.cachedStmtBytes[0] > 32 {
if IsAuthPacket(ms.cachedStmtBytes[0]) {
userName, dbName, err := parseAuthInfo(ms.cachedStmtBytes)
if err != nil {
log.Errorf("parse auth info failed <-- %s", err.Error())