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 return nc.receiver
} }
// Listen get a connection. // Listen get a connection.
func (nc *networkCard) listenNormal() { func (nc *networkCard) listenNormal() {
go func() { go func() {
@@ -135,7 +134,10 @@ func (nc *networkCard) listenNormal() {
// send FIN tcp packet to avoid not complete session cannot be released // send FIN tcp packet to avoid not complete session cannot be released
tcpPkt := packet.TransportLayer().(*layers.TCP) 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) nc.parseTCPPackage(packet)
continue continue
} }
@@ -274,4 +276,3 @@ func readToServerPackage(
return return
} }

View File

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

View File

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