Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
asche910 committed Oct 15, 2019
1 parent 44d8eea commit 0dd01ba
Show file tree
Hide file tree
Showing 13 changed files with 164 additions and 70 deletions.
12 changes: 6 additions & 6 deletions client/flyclient.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package client

import "github.com/asche910/flynet/util"
import "github.com/asche910/flynet/flynet"

type FlyClient struct {
Mode int
Expand All @@ -12,21 +12,21 @@ type FlyClient struct {
}

func (client *FlyClient) LocalSocks5Proxy(port string) {
util.StartSocks5(port)
flynet.StartSocks5(port)
}

func (client *FlyClient) LocalHttpProxy(port string) {
util.StartHttp(port)
flynet.StartHttp(port)
}

func (client *FlyClient) Socks5ProxyForTCP(localPort, serverAddr string) {
util.Socks5ForClientByTCP(localPort, serverAddr)
flynet.Socks5ForClientByTCP(localPort, serverAddr)
}

func (client *FlyClient) Socks5ProxyForUDP(localPort, serverAddr string) {
util.Socks5ForClientByUDP(localPort, serverAddr)
flynet.Socks5ForClientByUDP(localPort, serverAddr)
}

func (client *FlyClient) PortForward(laborPort, serverAddr string) {
util.PortForwardForClient(laborPort, serverAddr)
flynet.PortForwardForClient(laborPort, serverAddr)
}
11 changes: 5 additions & 6 deletions cmd/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import (
"fmt"
"github.com/asche910/flynet/client"
"github.com/asche910/flynet/log"
"github.com/asche910/flynet/relay"
"github.com/asche910/flynet/util"
"github.com/asche910/flynet/flynet"
log2 "log"
"os"
"strings"
Expand Down Expand Up @@ -88,9 +87,9 @@ func parseArgs(args []string) {
}
case "--listen", "-L":
if len(args) > 1 && !strings.HasPrefix(args[1], "-") {
port1 := util.CheckPort(args[1])
port1 := flynet.CheckPort(args[1])
if len(args) > 2 && !strings.HasPrefix(args[2], "-") {
port2 := util.CheckPort(args[2])
port2 := flynet.CheckPort(args[2])
flyClient.Ports = []string{port1, port2}
parseArgs(args[3:])
} else {
Expand Down Expand Up @@ -151,7 +150,7 @@ func checkArgs() {

func initLog() {
log.InitLog()
util.InitLog()
relay.InitLog()
flynet.InitLog()
flynet.InitLog()
logger = log.GetLogger()
}
11 changes: 5 additions & 6 deletions cmd/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ package main
import (
"fmt"
"github.com/asche910/flynet/log"
"github.com/asche910/flynet/relay"
"github.com/asche910/flynet/server"
"github.com/asche910/flynet/util"
"github.com/asche910/flynet/flynet"
log2 "log"
"os"
"strings"
Expand Down Expand Up @@ -89,9 +88,9 @@ func parseArgs(args []string) {
}
case "--listen", "-L":
if len(args) > 1 && !strings.HasPrefix(args[1], "-") {
port1 := util.CheckPort(args[1])
port1 := flynet.CheckPort(args[1])
if len(args) > 2 && !strings.HasPrefix(args[2], "-") {
port2 := util.CheckPort(args[2])
port2 := flynet.CheckPort(args[2])
flyServer.Ports = []string{port1, port2}
parseArgs(args[3:])
} else {
Expand Down Expand Up @@ -142,7 +141,7 @@ func checkArgs() {

func initLog() {
log.InitLog()
util.InitLog()
relay.InitLog()
flynet.InitLog()
flynet.InitLog()
logger = log.GetLogger()
}
Binary file added cmd/server/server_linux_amd64
Binary file not shown.
37 changes: 37 additions & 0 deletions flynet/cipher.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package flynet

import (
"crypto/aes"
"crypto/cipher"
)

const key = "asche910-flynet-"

var (
commonIV = []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}
)

type Cipher struct {
encoder cipher.Stream
decoder cipher.Stream
key []byte
method string
}

func NewCipherInstance() *Cipher{
c, err := aes.NewCipher([]byte(key))
if err != nil {
logger.Println("aes.NewCipher failed!", err)
}
enc := cipher.NewCFBEncrypter(c, commonIV)
dec := cipher.NewCFBDecrypter(c, commonIV)
return &Cipher{encoder:enc, decoder:dec}
}

func (cipher *Cipher) Encrypt(dst, src []byte) {
cipher.encoder.XORKeyStream(dst, src)
}

func (cipher *Cipher) Decrypt(dst, src []byte) {
cipher.decoder.XORKeyStream(dst, src)
}
41 changes: 41 additions & 0 deletions flynet/conn.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package flynet

import "net"

type Conn struct {
net.Conn
*Cipher
}

func (conn *Conn) Write(b []byte) (n int, err error) {
buff := make([]byte, 1024)
if len(buff) > len(b){
buff = buff[:len(b)]
}else {
buff = make([]byte, len(b))
}

conn.Encrypt(buff, b)
n, err = conn.Conn.Write(buff)
return
}

func (conn *Conn) Read(b []byte) (n int, err error) {
buff := make([]byte, 1024)
if len(buff) > len(b){
buff = buff[:len(b)]
}else {
buff = make([]byte, len(b))
}

n, err = conn.Conn.Read(buff)
if n > 0 {
conn.Decrypt(b[:n], buff[:n])
}
return
}

func (conn *Conn) Close() error {
err := conn.Conn.Close()
return err
}
2 changes: 1 addition & 1 deletion util/error_utils.go → flynet/error_utils.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package util
package flynet

import (
"fmt"
Expand Down
2 changes: 1 addition & 1 deletion util/http.go → flynet/http.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package util
package flynet

import (
"bytes"
Expand Down
2 changes: 1 addition & 1 deletion util/net_utils.go → flynet/net_utils.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package util
package flynet

import (
"fmt"
Expand Down
2 changes: 1 addition & 1 deletion util/portforward.go → flynet/portforward.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package util
package flynet

import (
"io"
Expand Down
75 changes: 47 additions & 28 deletions relay/relay.go → flynet/relay.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,14 @@
package relay
package flynet

import (
log2 "github.com/asche910/flynet/log"
"crypto/aes"
"crypto/cipher"
"fmt"
"github.com/xtaci/kcp-go"
"io"
"log"
"net"
)

const key = "asche910-flynet-"

var (
commonIV = []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}
logger *log.Logger
)

func InitLog() {
logger = log2.GetLogger()
}

func TCPToUDP(session *kcp.UDPSession, conn net.Conn) {
buff := make([]byte, 4096)
for {
Expand Down Expand Up @@ -78,8 +68,11 @@ func DecodeTo(writer io.Writer, reader io.Reader) {
logger.Println("DecodeTo ---> read failed!", err)
return
}
//fmt.Println(n)

fmt.Println("before:", buff)
buff = DeCrypt(buff, n)
fmt.Println("after:", buff)

n, err = writer.Write(buff[:n])
if err != nil {
logger.Println("DecodeTo ---> write failed!", err)
Expand All @@ -91,22 +84,48 @@ func Encrypt(by []byte, n int) []byte {
/* c, err := aes.NewCipher([]byte(key))
if err != nil {
logger.Println("aes.NewCipher failed!", err)
}
encrypter := cipher.NewCFBEncrypter(c, commonIV)
var buff = make([]byte, 1024)
encrypter.XORKeyStream(buff[:n], by[:n])*/
}*/
//encrypter := cipher.NewCFBEncrypter(c, commonIV)
var buff = make([]byte, 1024)
//encrypter.XORKeyStream(buff[:n], by[:n])
// TODO add encrypt algorithm
return by

block, err := aes.NewCipher([]byte(key))
if err != nil {
fmt.Println(err)
}
stream := cipher.NewCTR(block, commonIV)
stream.XORKeyStream(buff[:n], by[:n])
return buff
}

func DeCrypt(by []byte, n int) []byte {
/* c, err := aes.NewCipher([]byte(key))
if err != nil {
logger.Println("aes.NewCipher failed!", err)
/*c, err := aes.NewCipher([]byte(key))
if err != nil {
logger.Println("aes.NewCipher failed!", err)
}
decrypter := cipher.NewCFBDecrypter(c, commonIV)*/
//var buff = make([]byte, 1024)
//decrypter.XORKeyStream(buff[:n], by[:n])
//TODO add decrypt algorithm

return Encrypt(by, n)
}

func RelayTraffic(dst, src net.Conn) {
buff := make([]byte, 1024)
for {
n, err := src.Read(buff)
if err != nil {
fmt.Println(err)
break
}
fmt.Println("Read", n)
if n > 0 {
if n, err = dst.Write(buff[:n]); err != nil {
fmt.Println(err)
break
}
decrypter := cipher.NewCFBDecrypter(c, commonIV)
var buff = make([]byte, 1024)
decrypter.XORKeyStream(buff[:n], by[:n])*/
// TODO add decrypt algorithm
return by
}
}
}
27 changes: 13 additions & 14 deletions util/socks5.go → flynet/socks5.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package util
package flynet

import (
"crypto/sha1"
"fmt"
"github.com/asche910/flynet/relay"
"github.com/xtaci/kcp-go"
"golang.org/x/crypto/pbkdf2"
"io"
Expand Down Expand Up @@ -84,8 +83,8 @@ func Socks5ForClientByTCP(localPort, serverAddr string) {
logger.Println("connect remote failed!")
return
}
go relay.EncodeTo(server, client)
relay.DecodeTo(client, server)
go EncodeTo(server, client)
DecodeTo(client, server)
}()
}
}
Expand All @@ -108,19 +107,19 @@ func Socks5ForServerByTCP(localPort string) {
}

//logger.Println(data[:])
data = relay.DeCrypt(data[:], n)
data = DeCrypt(data[:], n)
//logger.Println(data[:])

if data[0] == 0x05 {
// response the success of handshake to client
_, _ = client.Write(relay.Encrypt([]byte{0x05, 0x00}, 2)[:2])
_, _ = client.Write(Encrypt([]byte{0x05, 0x00}, 2)[:2])
// read the detail request from client
n, err = client.Read(data[:])
if err != nil {
logger.Println("read request failed!", err)
return
}
data = relay.DeCrypt(data[:n], n)
data = DeCrypt(data[:n], n)

var host, port = parseSocksRequest(data, n)
// request to the target server
Expand All @@ -132,11 +131,11 @@ func Socks5ForServerByTCP(localPort string) {
// response request success to client
by := []byte{0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
byLen := len(by)
by = relay.Encrypt(by[:], byLen)
by = Encrypt(by[:], byLen)
_, _ = client.Write(by[:byLen])

go relay.DecodeTo(server, client)
relay.EncodeTo(client, server)
go DecodeTo(server, client)
EncodeTo(client, server)
}
}()
}
Expand Down Expand Up @@ -174,8 +173,8 @@ func Socks5ForClientByUDP(localPort, serverAddr string) {
logger.Println("connect targetServer failed! ", err)
return
}
go relay.TCPToUDP(session, con)
relay.UDPToTCP(con, session)
go TCPToUDP(session, con)
UDPToTCP(con, session)
}
}()
}
Expand Down Expand Up @@ -219,8 +218,8 @@ func Socks5ForServerByUDP(localPort string) {
logger.Println("response to client failed! ", err)
return
}
go relay.UDPToTCP(server, con)
relay.TCPToUDP(con, server)
go UDPToTCP(server, con)
TCPToUDP(con, server)
} else {
logger.Println("unrecognized protocol!")
return
Expand Down
Loading

0 comments on commit 0dd01ba

Please sign in to comment.