Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
bjdgyc 2023-09-22 16:19:10 +08:00
commit 4f9cc2074a
2 changed files with 13 additions and 12 deletions

View File

@ -3,6 +3,7 @@ package handler
import ( import (
"crypto/md5" "crypto/md5"
"encoding/binary" "encoding/binary"
"runtime/debug"
"time" "time"
"github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/base"
@ -101,7 +102,12 @@ func logAuditBatch() {
// 解析IP包的数据 // 解析IP包的数据
func logAudit(userName string, pl *sessdata.Payload) { func logAudit(userName string, pl *sessdata.Payload) {
defer putPayload(pl) defer func() {
if err := recover(); err != nil {
base.Error("logAudit is panic: ", err, "\n", string(debug.Stack()), "\n", pl.Data)
}
putPayload(pl)
}()
if !(pl.LType == sessdata.LTypeIPData && pl.PType == 0x00) { if !(pl.LType == sessdata.LTypeIPData && pl.PType == 0x00) {
return return
@ -119,19 +125,15 @@ func logAudit(userName string, pl *sessdata.Payload) {
default: default:
return return
} }
// IP报文只包含头部信息时, 则打印LOG并退出
ipSrc := waterutil.IPv4Source(pl.Data)
ipDst := waterutil.IPv4Destination(pl.Data)
// ipPort := waterutil.IPv4DestinationPort(pl.Data)
// 修复 panic: runtime error: index out of range [2] with length 2
ipPl := waterutil.IPv4Payload(pl.Data) ipPl := waterutil.IPv4Payload(pl.Data)
if len(ipPl) < 3 { if len(ipPl) < 4 {
base.Error("ipPl len < 3", pl.Data) base.Error("ipPl len < 4", ipPl, pl.Data)
return return
} }
ipPort := (uint16(ipPl[2]) << 8) | uint16(ipPl[3]) ipPort := (uint16(ipPl[2]) << 8) | uint16(ipPl[3])
ipSrc := waterutil.IPv4Source(pl.Data)
ipDst := waterutil.IPv4Destination(pl.Data)
b := getByte51() b := getByte51()
key := *b key := *b
copy(key[:16], ipSrc) copy(key[:16], ipSrc)
@ -187,7 +189,6 @@ func logAudit(userName string, pl *sessdata.Payload) {
AccessProto: accessProto, AccessProto: accessProto,
Info: info, Info: info,
} }
select { select {
case logBatch.LogChan <- audit: case logBatch.LogChan <- audit:
default: default:

View File

@ -29,7 +29,7 @@ func onTCP(payload []byte) (uint8, string) {
} }
func sniNewParser(b []byte) (uint8, string) { func sniNewParser(b []byte) (uint8, string) {
if len(b) < 2 || b[0] != 0x16 || b[1] != 0x03 { if len(b) < 6 || b[0] != 0x16 || b[1] != 0x03 {
return acc_proto_tcp, "" return acc_proto_tcp, ""
} }
rest := b[5:] rest := b[5:]