修复一个判断是否为加密包的严重错误

This commit is contained in:
dmy@lab
2015-11-18 20:24:39 +08:00
parent 6eb855ee9a
commit fc214b2c72
6 changed files with 93 additions and 13 deletions

View File

@@ -2,6 +2,7 @@ package tscipher
import (
"bytes"
"fmt"
"github.com/TransX/log"
"github.com/TransX/utils"
"io"
@@ -82,8 +83,9 @@ func WrapPackage(data []byte) []byte { //把要加密传输的数据打包成一
sizeOfData := len(data)
binSize := utils.Int2binary(sizeOfData, 10)
header := append(append(StartMark, binSize...), EndMark...)
// log.Error("size of header %d %x", len(header), header)
//加密
key := []byte("hahahehe~-1!")
key := []byte("#2GD+.>dt`Qdp")
key = key
cipheredHeader := make([]byte, len(header))
for i, v := range header {
@@ -96,11 +98,13 @@ func UnwrapPackage(pacakge []byte) (data []byte, rest []byte, err error) {
//前14个字节是header
cipheredHeader := pacakge[:18]
header := make([]byte, len(cipheredHeader))
key := []byte("hahahehe~-1!")
key := []byte("#2GD+.>dt`Qdp")
key = key
for i, v := range cipheredHeader {
header[i] = v ^ key[i%len(key)]
}
// log.Error("receive header %d %x", len(header), header)
// log.Error("receive pacakge %d %x", len(pacakge[:180]), pacakge[:180])
start := header[:4]
end := header[14:]
binSize := header[4:14]
@@ -126,7 +130,7 @@ func UnwrapPackage(pacakge []byte) (data []byte, rest []byte, err error) {
b := strings.Index(string(pacakge), "_=1z")
err = &NotPackageError{"NotPackageError(contains)" + "start:" + string(start) + " end:" + string(end) + "pacakge " + strconv.Itoa(len(pacakge)) + "start" + strconv.Itoa(a) + "end" + strconv.Itoa(b)}
} else {
err = &NotPackageError{"NotPackageError" + "start:" + string(start) + " end:" + string(end)}
err = &NotPackageError{fmt.Sprintf("NotPackageError start: %s end: %s whole %x", string(start), string(end), header)}
}
}
return
@@ -164,11 +168,11 @@ func RowReceiveData(carrier *Carrier) (n int, err error) {
}
func ReceiveData(carrier *Carrier) (n int, err error) {
defer func() {
if r := recover(); r != nil {
log.Error("ReceiveData err %s", r)
}
}()
// defer func() {
// if r := recover(); r != nil {
// log.Error("ReceiveData err %s", r)
// }
// }()
log.Info("id %s wrapedPackage := carrier.GetReceiveBuff()", carrier.AttachedTunnelID)
wrapedPackage := carrier.GetReceiveBuff() //make([]byte, 0, cap(carrier.Cache))
var packageData []byte
@@ -178,7 +182,8 @@ func ReceiveData(carrier *Carrier) (n int, err error) {
data, rest, err := UnwrapPackage(wrapedPackage)
packageData = data
_rest = rest
if err, ok := err.(*NotPackageError); len(wrapedPackage) > 0 && ok {
if err, ok := err.(*NotPackageError); len(wrapedPackage) >= 18 && ok {
log.Debug("return NotPackageError %s", carrier.AttachedTunnelID)
return 0, err
}
log.Debug("id %s length of package %d", carrier.AttachedTunnelID, len(packageData))