修复一个判断是否为加密包的严重错误
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"
|
"fmt"
|
||||||
"github.com/TransX/cli"
|
"github.com/TransX/cli"
|
||||||
"github.com/TransX/log"
|
"github.com/TransX/log"
|
||||||
|
"github.com/davecheney/profile"
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -22,6 +23,7 @@ func tunnel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
defer profile.Start(profile.CPUProfile).Stop()
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
fmt.Println("Hello World!")
|
fmt.Println("Hello World!")
|
||||||
log.LogTo(cli.LogTo, "INFO")
|
log.LogTo(cli.LogTo, "INFO")
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,7 @@ func clientBin(t *testing.T) {
|
||||||
}
|
}
|
||||||
log.Info("Test Client Receive %s", bytes[:n])
|
log.Info("Test Client Receive %s", bytes[:n])
|
||||||
fmt.Println("Test Client Receive ", string(bytes[:n]))
|
fmt.Println("Test Client Receive ", string(bytes[:n]))
|
||||||
// time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 2)
|
||||||
conn.Close()
|
conn.Close()
|
||||||
log.Info("Test Client closed")
|
log.Info("Test Client closed")
|
||||||
|
|
||||||
|
|
@ -220,7 +220,7 @@ func clientText(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTunnel(t *testing.T) {
|
func TestTunnel(t *testing.T) {
|
||||||
log.LogTo("log.txt", "DEBUG")
|
log.LogTo("stdout", "ERROR")
|
||||||
log.Info("Test Start testing.")
|
log.Info("Test Start testing.")
|
||||||
go serverBin(t)
|
go serverBin(t)
|
||||||
go clientBin(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 (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"github.com/TransX/log"
|
"github.com/TransX/log"
|
||||||
"github.com/TransX/utils"
|
"github.com/TransX/utils"
|
||||||
"io"
|
"io"
|
||||||
|
|
@ -82,8 +83,9 @@ func WrapPackage(data []byte) []byte { //把要加密传输的数据打包成一
|
||||||
sizeOfData := len(data)
|
sizeOfData := len(data)
|
||||||
binSize := utils.Int2binary(sizeOfData, 10)
|
binSize := utils.Int2binary(sizeOfData, 10)
|
||||||
header := append(append(StartMark, binSize...), EndMark...)
|
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
|
key = key
|
||||||
cipheredHeader := make([]byte, len(header))
|
cipheredHeader := make([]byte, len(header))
|
||||||
for i, v := range header {
|
for i, v := range header {
|
||||||
|
|
@ -96,11 +98,13 @@ func UnwrapPackage(pacakge []byte) (data []byte, rest []byte, err error) {
|
||||||
//前14个字节是header
|
//前14个字节是header
|
||||||
cipheredHeader := pacakge[:18]
|
cipheredHeader := pacakge[:18]
|
||||||
header := make([]byte, len(cipheredHeader))
|
header := make([]byte, len(cipheredHeader))
|
||||||
key := []byte("hahahehe~-1!")
|
key := []byte("#2GD+.>dt`Qdp")
|
||||||
key = key
|
key = key
|
||||||
for i, v := range cipheredHeader {
|
for i, v := range cipheredHeader {
|
||||||
header[i] = v ^ key[i%len(key)]
|
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]
|
start := header[:4]
|
||||||
end := header[14:]
|
end := header[14:]
|
||||||
binSize := header[4: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")
|
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)}
|
err = &NotPackageError{"NotPackageError(contains)" + "start:" + string(start) + " end:" + string(end) + "pacakge " + strconv.Itoa(len(pacakge)) + "start" + strconv.Itoa(a) + "end" + strconv.Itoa(b)}
|
||||||
} else {
|
} 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
|
return
|
||||||
|
|
@ -164,11 +168,11 @@ func RowReceiveData(carrier *Carrier) (n int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReceiveData(carrier *Carrier) (n int, err error) {
|
func ReceiveData(carrier *Carrier) (n int, err error) {
|
||||||
defer func() {
|
// defer func() {
|
||||||
if r := recover(); r != nil {
|
// if r := recover(); r != nil {
|
||||||
log.Error("ReceiveData err %s", r)
|
// log.Error("ReceiveData err %s", r)
|
||||||
}
|
// }
|
||||||
}()
|
// }()
|
||||||
log.Info("id %s wrapedPackage := carrier.GetReceiveBuff()", carrier.AttachedTunnelID)
|
log.Info("id %s wrapedPackage := carrier.GetReceiveBuff()", carrier.AttachedTunnelID)
|
||||||
wrapedPackage := carrier.GetReceiveBuff() //make([]byte, 0, cap(carrier.Cache))
|
wrapedPackage := carrier.GetReceiveBuff() //make([]byte, 0, cap(carrier.Cache))
|
||||||
var packageData []byte
|
var packageData []byte
|
||||||
|
|
@ -178,7 +182,8 @@ func ReceiveData(carrier *Carrier) (n int, err error) {
|
||||||
data, rest, err := UnwrapPackage(wrapedPackage)
|
data, rest, err := UnwrapPackage(wrapedPackage)
|
||||||
packageData = data
|
packageData = data
|
||||||
_rest = rest
|
_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
|
return 0, err
|
||||||
}
|
}
|
||||||
log.Debug("id %s length of package %d", carrier.AttachedTunnelID, len(packageData))
|
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 {
|
if err != nil {
|
||||||
log.Panic("Write panic. ID: %s, Err: %s, Remote Add: %s", id, err, dest.RemoteAddr().String())
|
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