update lang

This commit is contained in:
jtjing
2018-10-06 00:29:06 +08:00
parent 7dade7158a
commit d180a6c89a
11 changed files with 153 additions and 205 deletions

View File

@@ -21,8 +21,8 @@ const (
)
type H struct {
port int//端口
version string//插件版本
port int
version string
}
var hp *H
@@ -81,7 +81,7 @@ func (m *H) SetFlag(flg []string) {
return
}
if c >> 1 == 0 {
fmt.Println("http参数数量不正确!")
fmt.Println("ERR : Http Number of parameters")
os.Exit(1)
}
for i:=0;i<c;i=i+2 {
@@ -93,14 +93,14 @@ func (m *H) SetFlag(flg []string) {
port, err := strconv.Atoi(val);
m.port = port
if err != nil {
panic("端口数不正确")
panic("ERR : port")
}
if port < 0 || port > 65535 {
panic("参数不正确: 端口范围(0-65535)")
panic("ERR : port(0-65535)")
}
break
default:
panic("参数不正确")
panic("ERR : mysql's params")
}
}
}

View File

@@ -27,12 +27,12 @@ type stream struct {
type packet struct {
isClientFlow bool //客户端->服务器端流
isClientFlow bool //client->server
messageLength int //总消息大小
requestID int //此消息的标识符
responseTo int //从原始请求的requestID
opCode int //请求类型
messageLength int
requestID int
responseTo int
opCode int //request type
payload io.Reader
}
@@ -56,7 +56,7 @@ func (m *Mongodb) SetFlag(flg []string) {
return
}
if c >> 1 != 1 {
panic("Mongodb参数数量不正确!")
panic("ERR : Mongodb Number of parameters")
}
for i:=0;i<c;i=i+2 {
key := flg[i]
@@ -66,15 +66,15 @@ func (m *Mongodb) SetFlag(flg []string) {
case CmdPort:
p, err := strconv.Atoi(val);
if err != nil {
panic("端口数不正确")
panic("ERR : port")
}
mongodbInstance.port = p
if p < 0 || p > 65535 {
panic("参数不正确: 端口范围(0-65535)")
panic("ERR : port(0-65535)")
}
break
default:
panic("参数不正确")
panic("ERR : mysql's params")
}
}
}
@@ -125,10 +125,10 @@ func (m *Mongodb) newPacket(net, transport gopacket.Flow, r io.Reader) *packet {
//stream close
if err == io.EOF {
fmt.Println(net, transport, " 关闭")
fmt.Println(net, transport, " close")
return nil
} else if err != nil {
fmt.Println("流解析错误", net, transport, ":", err)
fmt.Println("ERR : Unknown stream", net, transport, ":", err)
return nil
}
@@ -173,7 +173,7 @@ func (stm *stream) resolveClientPacket(pk *packet) {
_ = zero
_ = flags
msg = fmt.Sprintf(" [更新] [集合:%s] 语句: %v %v",
msg = fmt.Sprintf(" [Update] [coll:%s] %v %v",
fullCollectionName,
selector,
update,
@@ -185,7 +185,7 @@ func (stm *stream) resolveClientPacket(pk *packet) {
command := ReadBson2Json(pk.payload)
_ = flags
msg = fmt.Sprintf(" [插入] [集合:%s] 语句: %v",
msg = fmt.Sprintf(" [Insert] [coll:%s] %v",
fullCollectionName,
command,
)
@@ -202,7 +202,7 @@ func (stm *stream) resolveClientPacket(pk *packet) {
command := ReadBson2Json(pk.payload)
selector := ReadBson2Json(pk.payload)
msg = fmt.Sprintf(" [查询] [集合:%s] 语句: %v %v",
msg = fmt.Sprintf(" [Query] [coll:%s] %v %v",
fullCollectionName,
command,
selector,
@@ -215,7 +215,7 @@ func (stm *stream) resolveClientPacket(pk *packet) {
commandArgs := ReadBson2Json(pk.payload)
inputDocs := ReadBson2Json(pk.payload)
msg = fmt.Sprintf(" [命令] [数据库:%s] [命令名:%s] %v %v %v",
msg = fmt.Sprintf(" [Commend] [DB:%s] [Cmd:%s] %v %v %v",
database,
commandName,
metaData,
@@ -230,7 +230,7 @@ func (stm *stream) resolveClientPacket(pk *packet) {
cursorId := ReadInt64(pk.payload)
_ = zero
msg = fmt.Sprintf(" [查询更多] [集合:%s] [回复数量:%v] [游标:%v]",
msg = fmt.Sprintf(" [Query more] [coll:%s] [num of reply:%v] [cursor:%v]",
fullCollectionName,
numberToReturn,
cursorId,
@@ -244,7 +244,7 @@ func (stm *stream) resolveClientPacket(pk *packet) {
_ = zero
_ = flags
msg = fmt.Sprintf(" [删除] [集合:%s] 语句: %v",
msg = fmt.Sprintf(" [Delete] [coll:%s] %v",
fullCollectionName,
selector,
)

View File

@@ -1,12 +1,12 @@
package build
const (
ComQueryRequestPacket string = "【查询】"
OkPacket string = "【正确】"
ErrorPacket string = "【错误】"
PreparePacket string = "【预处理】"
SendClientHandshakePacket string = "【用户认证】"
SendServerHandshakePacket string = "【登录认证】"
ComQueryRequestPacket string = "【Query】"
OkPacket string = "【Ok】"
ErrorPacket string = "【Err】"
PreparePacket string = "【Pretreatment】"
SendClientHandshakePacket string = "【User Auth】"
SendServerHandshakePacket string = "【Login】"
)
const (

View File

@@ -22,9 +22,9 @@ const (
)
type Mysql struct {
port int//端口
version string//插件版本
source map[string]*stream//流
port int
version string
source map[string]*stream
}
type stream struct {
@@ -101,7 +101,7 @@ func (m *Mysql) SetFlag(flg []string) {
return
}
if c >> 1 == 0 {
fmt.Println("Mysql参数数量不正确!")
fmt.Println("ERR : Mysql Number of parameters")
os.Exit(1)
}
for i:=0;i<c;i=i+2 {
@@ -113,14 +113,14 @@ func (m *Mysql) SetFlag(flg []string) {
port, err := strconv.Atoi(val);
m.port = port
if err != nil {
panic("端口数不正确")
panic("ERR : port")
}
if port < 0 || port > 65535 {
panic("参数不正确: 端口范围(0-65535)")
panic("ERR : port(0-65535)")
}
break
default:
panic("参数不正确")
panic("ERR : mysql's params")
}
}
}
@@ -137,10 +137,10 @@ func (m *Mysql) newPacket(net, transport gopacket.Flow, r io.Reader) *packet {
//close stream
if err == io.EOF {
fmt.Println(net, transport, " 关闭")
fmt.Println(net, transport, " close")
return nil
} else if err != nil {
fmt.Println("错误流:", net, transport, ":", err)
fmt.Println("ERR : Unknown stream", net, transport, ":", err)
}
//generate new packet
@@ -165,7 +165,7 @@ func (m *Mysql) resolvePacketTo(r io.Reader, w io.Writer) (uint8, error) {
if n == 0 && err == io.EOF {
return 0, io.EOF
}
return 0, errors.New("错误流")
return 0, errors.New("ERR : Unknown stream")
}
length := int(uint32(header[0]) | uint32(header[1])<<8 | uint32(header[2])<<16)
@@ -174,9 +174,9 @@ func (m *Mysql) resolvePacketTo(r io.Reader, w io.Writer) (uint8, error) {
seq = header[3]
if n, err := io.CopyN(w, r, int64(length)); err != nil {
return 0, errors.New("错误流")
return 0, errors.New("ERR : Unknown stream")
} else if n != int64(length) {
return 0, errors.New("错误流")
return 0, errors.New("ERR : Unknown stream")
} else {
return seq, nil
}
@@ -222,7 +222,7 @@ func (stm *stream) resolveServerPacket(payload []byte, seq int) {
errorCode := int(binary.LittleEndian.Uint16(payload[1:3]))
errorMsg,_ := ReadStringFromByte(payload[4:])
msg = GetNowStr(false)+"%s 错误代码:%s,错误信息:%s"
msg = GetNowStr(false)+"%s Err code:%s,Err msg:%s"
msg = fmt.Sprintf(msg, ErrorPacket, strconv.Itoa(errorCode), strings.TrimSpace(errorMsg))
case 0x00:
@@ -230,7 +230,7 @@ func (stm *stream) resolveServerPacket(payload []byte, seq int) {
l,_ := LengthBinary(payload[pos:])
affectedRows := int(l)
msg += GetNowStr(false)+"%s 影响行数:%s"
msg += GetNowStr(false)+"%s Effect Row:%s"
msg = fmt.Sprintf(msg, OkPacket, strconv.Itoa(affectedRows))
default:
@@ -250,7 +250,7 @@ func (stm *stream) resolveClientPacket(payload []byte, seq int) {
msg = fmt.Sprintf("USE %s;\n", payload[1:])
case COM_DROP_DB:
msg = fmt.Sprintf("删除数据库 %s;\n", payload[1:])
msg = fmt.Sprintf("Drop DB %s;\n", payload[1:])
case COM_CREATE_DB, COM_QUERY:
statement := string(payload[1:])
@@ -259,17 +259,17 @@ func (stm *stream) resolveClientPacket(payload []byte, seq int) {
serverPacket := stm.findStmtPacket(stm.packets, seq+1)
if serverPacket == nil {
log.Println("找不到预处理响应包")
log.Println("ERR : Not found stm packet")
}
//获取响应包中预处理id
//fetch stm id
stmtID := binary.LittleEndian.Uint32(serverPacket.payload[1:5])
stmt := &Stmt{
ID: stmtID,
Query: string(payload[1:]),
}
//记录预处理语句
//record stm sql
stm.stmtMap[stmtID] = stmt
stmt.FieldCount = binary.LittleEndian.Uint16(serverPacket.payload[5:7])
stmt.ParamCount = binary.LittleEndian.Uint16(serverPacket.payload[7:9])
@@ -305,19 +305,19 @@ func (stm *stream) resolveClientPacket(payload []byte, seq int) {
var stmt *Stmt
var ok bool
if stmt, ok = stm.stmtMap[stmtID]; ok == false {
log.Println("未发现预处理id: ", stmtID)
log.Println("ERR : Not found stm id", stmtID)
}
//参数
//params
pos += 5
if stmt.ParamCount > 0 {
//空位图Null-Bitmap长度 = (参数数量 + 7) / 8 字节
//Null-Bitmaplen = (paramsCount + 7) / 8 byte
step := int((stmt.ParamCount + 7) / 8)
nullBitmap := payload[pos : pos+step]
pos += step
//参数分隔标志
//Parameter separator
flag := payload[pos]
pos++
@@ -325,19 +325,18 @@ func (stm *stream) resolveClientPacket(payload []byte, seq int) {
var pTypes []byte
var pValues []byte
//如果参数分隔标志值为1
//n 每个参数的类型值(长度 = 参数数量 * 2 字节
//n 每个参数的值
//if flag == 1
//n len = paramsCount * 2 byte
if flag == 1 {
pTypes = payload[pos : pos+int(stmt.ParamCount)*2]
pos += int(stmt.ParamCount) * 2
pValues = payload[pos:]
}
//绑定参数
//bind params
err := stmt.BindArgs(nullBitmap, pTypes, pValues)
if err != nil {
log.Println("预处理绑定参数失败: ", err)
log.Println("ERR : Could not bind params", err)
}
}
msg = string(stmt.WriteToText())

View File

@@ -6,7 +6,6 @@ import (
"fmt"
"math"
"strings"
"errors"
)
@@ -23,7 +22,7 @@ func (stmt *Stmt) WriteToText() []byte {
var buf bytes.Buffer
str := fmt.Sprintf("预处理编号[%d]: '%s';\n", stmt.ID, stmt.Query)
str := fmt.Sprintf("Stm id[%d]: '%s';\n", stmt.ID, stmt.Query)
buf.WriteString(str)
for i := 0; i < int(stmt.ParamCount); i++ {
@@ -40,7 +39,7 @@ func (stmt *Stmt) WriteToText() []byte {
buf.WriteString(str)
}
str = fmt.Sprintf("执行预处理[%d]: ", stmt.ID)
str = fmt.Sprintf("Execute stm id[%d]: ", stmt.ID)
buf.WriteString(str)
for i := 0; i < int(stmt.ParamCount); i++ {
if i == 0 {
@@ -54,7 +53,7 @@ func (stmt *Stmt) WriteToText() []byte {
}
buf.WriteString(";\n")
str = fmt.Sprintf("丢弃预处理[%d];\n", stmt.ID)
str = fmt.Sprintf("Drop stm id[%d];\n", stmt.ID)
buf.WriteString(str)
return buf.Bytes()
@@ -72,13 +71,11 @@ func (stmt *Stmt) BindArgs(nullBitmap, paramTypes, paramValues []byte) error {
for i := 0; i < int(stmt.ParamCount); i++ {
//判断参数是否为null
if nullBitmap[i>>3]&(1<<(uint(i)%8)) > 0 {
args[i] = nil
continue
}
//参数类型
typ := paramTypes[i<<1]
unsigned := (paramTypes[(i<<1)+1] & 0x80) > 0
@@ -168,7 +165,7 @@ func (stmt *Stmt) BindArgs(nullBitmap, paramTypes, paramValues []byte) error {
continue
}
default:
return errors.New(fmt.Sprintf("预处理未知类型 %d", typ))
return errors.New(fmt.Sprintf("ERR : Unknown stm type %d", typ))
}
}
return nil

View File

@@ -31,19 +31,15 @@ func NewInstance() *Redis{
return redis
}
/**
解析流
*/
func (red Redis) ResolveStream(net, transport gopacket.Flow, r io.Reader) {
//只解析clint发出去的包
buf := bufio.NewReader(r)
var cmd string
var cmdCount = 0
for {
line, _, _ := buf.ReadLine()
//判断链接是否断开
if len(line) == 0 {
buff := make([]byte, 1)
_, err := r.Read(buff)
@@ -53,17 +49,17 @@ func (red Redis) ResolveStream(net, transport gopacket.Flow, r io.Reader) {
}
}
//过滤无用数据
//Filtering useless data
if !strings.HasPrefix(string(line), "*") {
continue
}
//过滤服务器返回数据
//Do not display
if strings.EqualFold(transport.Src().String(), strconv.Itoa(red.port)) == true {
continue
}
//解析
//run
l := string(line[1])
cmdCount, _ = strconv.Atoi(l)
cmd = ""
@@ -87,7 +83,7 @@ func (red *Redis) SetFlag(flg []string) {
return
}
if c >> 1 != 1 {
panic("Redis参数数量不正确!")
panic("ERR : Redis num of params")
}
for i:=0;i<c;i=i+2 {
key := flg[i]
@@ -98,14 +94,14 @@ func (red *Redis) SetFlag(flg []string) {
port, err := strconv.Atoi(val);
redis.port = port
if err != nil {
panic("端口数不正确")
panic("ERR : Port error")
}
if port < 0 || port > 65535 {
panic("参数不正确: 端口范围(0-65535)")
panic("ERR : Port(0-65535)")
}
break
default:
panic("参数不正确")
panic("ERR : redis's params")
}
}
}
@@ -114,13 +110,13 @@ func (red *Redis) SetFlag(flg []string) {
BPFFilter
*/
func (red *Redis) BPFFilter() string {
return "tcp and port "+strconv.Itoa(redis.port);
return "tcp and port "+strconv.Itoa(redis.port)
}
/**
Version
*/
func (red *Redis) Version() string {
return red.version;
return red.version
}