修复一个判断是否为加密包的严重错误
This commit is contained in:
parent
6eb855ee9a
commit
fc214b2c72
|
|
@ -0,0 +1,73 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
llog "github.com/TransX/log"
|
||||
"github.com/davecheney/profile"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var mux sync.Mutex
|
||||
var benchSeed int
|
||||
|
||||
func transClient() {
|
||||
t := NewTransTCP()
|
||||
t.Start("1200", "127.0.0.1", "1201", "client")
|
||||
}
|
||||
|
||||
func transServer() {
|
||||
t := NewTransTCP()
|
||||
t.Start("1201", "192.168.56.101", "80", "server")
|
||||
}
|
||||
|
||||
func doHttp(c chan int) {
|
||||
resp, err := http.Get("http://127.0.0.1:1200/test.bin")
|
||||
if err != nil {
|
||||
log.Println("could not get:", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
log.Printf("got %d bytes\n", len(body))
|
||||
if err != nil {
|
||||
log.Println("not get:", err)
|
||||
} else {
|
||||
|
||||
}
|
||||
c <- 0
|
||||
|
||||
}
|
||||
|
||||
func randMillionSecond() time.Duration {
|
||||
mux.Lock()
|
||||
benchSeed++
|
||||
defer mux.Unlock()
|
||||
s := rand.NewSource(int64(benchSeed))
|
||||
r := rand.New(s)
|
||||
return time.Duration(r.Int() % 1000)
|
||||
}
|
||||
|
||||
func attack() {
|
||||
c := make(chan int)
|
||||
for i := 0; i < 10; i++ {
|
||||
time.Sleep(time.Millisecond * randMillionSecond())
|
||||
go doHttp(c)
|
||||
}
|
||||
for i := 0; i < 10; i++ {
|
||||
<-c
|
||||
}
|
||||
log.Println("Finish")
|
||||
}
|
||||
|
||||
func main() {
|
||||
llog.LogTo("applog/log.txt", "DEBUG")
|
||||
defer profile.Start(profile.CPUProfile).Stop()
|
||||
benchSeed = 0
|
||||
go transClient()
|
||||
go transServer()
|
||||
attack()
|
||||
}
|
||||
2
main.go
2
main.go
|
|
@ -6,6 +6,7 @@ import (
|
|||
"fmt"
|
||||
"github.com/TransX/cli"
|
||||
"github.com/TransX/log"
|
||||
"github.com/davecheney/profile"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
|
|
@ -22,6 +23,7 @@ func tunnel() {
|
|||
}
|
||||
|
||||
func main() {
|
||||
defer profile.Start(profile.CPUProfile).Stop()
|
||||
flag.Parse()
|
||||
fmt.Println("Hello World!")
|
||||
log.LogTo(cli.LogTo, "INFO")
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ func clientBin(t *testing.T) {
|
|||
}
|
||||
log.Info("Test Client Receive %s", bytes[:n])
|
||||
fmt.Println("Test Client Receive ", string(bytes[:n]))
|
||||
// time.Sleep(time.Second * 2)
|
||||
time.Sleep(time.Second * 2)
|
||||
conn.Close()
|
||||
log.Info("Test Client closed")
|
||||
|
||||
|
|
@ -220,7 +220,7 @@ func clientText(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestTunnel(t *testing.T) {
|
||||
log.LogTo("log.txt", "DEBUG")
|
||||
log.LogTo("stdout", "ERROR")
|
||||
log.Info("Test Start testing.")
|
||||
go serverBin(t)
|
||||
go clientBin(t)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
.\TransX -destip 191.101.11.132 -destport 8321 -listenport 1082 -encrypt server -log applog/server.log
|
||||
.\TransX -destip 127.0.0.1 -destport 1084 -listenport 1082 -encrypt server -log applog/server.log
|
||||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ func (this *Tunnel) run() { //单向的,从src发送到dest
|
|||
if err != nil {
|
||||
log.Panic("Write panic. ID: %s, Err: %s, Remote Add: %s", id, err, dest.RemoteAddr().String())
|
||||
}
|
||||
log.Info("Write %d bytes from %s to %s. Tunnel: %s . 18 bytes", n, dest.LocalAddr(), dest.RemoteAddr().String(), id, string(sendCarrier.Cache[:18]))
|
||||
log.Info("Write %d bytes from %s to %s. Tunnel: %s . 18 bytes %x", n, dest.LocalAddr(), dest.RemoteAddr().String(), id, sendCarrier.Cache[:18])
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue