This commit is contained in:
Alex Tsai 2021-05-24 11:25:22 +08:00
parent 2110fa6c1e
commit 912792b4ad
6 changed files with 12 additions and 30 deletions

View File

@ -12,7 +12,6 @@ import (
// StartUDPClient start udp client // StartUDPClient start udp client
func StartUDPClient(config config.Config) { func StartUDPClient(config config.Config) {
config.Init()
iface := tun.CreateTun(config.CIDR) iface := tun.CreateTun(config.CIDR)
serverAddr, err := net.ResolveUDPAddr("udp", config.ServerAddr) serverAddr, err := net.ResolveUDPAddr("udp", config.ServerAddr)
if err != nil { if err != nil {
@ -36,8 +35,7 @@ func StartUDPClient(config config.Config) {
if err != nil || n == 0 { if err != nil || n == 0 {
continue continue
} }
// decrypt data b := cipher.XOR(buf[:n])
b := cipher.Decrypt(buf[:n])
if !waterutil.IsIPv4(b) { if !waterutil.IsIPv4(b) {
continue continue
} }
@ -54,8 +52,7 @@ func StartUDPClient(config config.Config) {
if !waterutil.IsIPv4(packet) { if !waterutil.IsIPv4(packet) {
continue continue
} }
// encrypt data b := cipher.XOR(packet[:n])
b := cipher.Encrypt(packet[:n])
conn.WriteToUDP(b, serverAddr) conn.WriteToUDP(b, serverAddr)
} }
} }

View File

@ -18,7 +18,6 @@ import (
// StartWSClient start ws client // StartWSClient start ws client
func StartWSClient(config config.Config) { func StartWSClient(config config.Config) {
config.Init()
iface := tun.CreateTun(config.CIDR) iface := tun.CreateTun(config.CIDR)
c := cache.New(30*time.Minute, 10*time.Minute) c := cache.New(30*time.Minute, 10*time.Minute)
log.Printf("vtun ws client started,CIDR is %v", config.CIDR) log.Printf("vtun ws client started,CIDR is %v", config.CIDR)
@ -50,7 +49,7 @@ func StartWSClient(config config.Config) {
c.Set(key, conn, cache.DefaultExpiration) c.Set(key, conn, cache.DefaultExpiration)
go wsToTun(c, key, conn, iface) go wsToTun(c, key, conn, iface)
} }
b = cipher.Encrypt(b) b = cipher.XOR(b)
conn.WriteMessage(websocket.BinaryMessage, b) conn.WriteMessage(websocket.BinaryMessage, b)
} }
} }
@ -63,7 +62,7 @@ func wsToTun(c *cache.Cache, key string, wsConn *websocket.Conn, iface *water.In
if err != nil || err == io.EOF { if err != nil || err == io.EOF {
break break
} }
b = cipher.Decrypt(b) b = cipher.XOR(b)
if !waterutil.IsIPv4(b) { if !waterutil.IsIPv4(b) {
continue continue
} }

View File

@ -11,22 +11,12 @@ func GenerateKey(key string) {
_key = []byte(key) _key = []byte(key)
} }
func Encrypt(data []byte) []byte { func XOR(src []byte) []byte {
c, err := rc4.NewCipher(_key) c, err := rc4.NewCipher(_key)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
dst := make([]byte, len(data)) dst := make([]byte, len(src))
c.XORKeyStream(dst, data) c.XORKeyStream(dst, src)
return dst
}
func Decrypt(data []byte) []byte {
c, err := rc4.NewCipher(_key)
if err != nil {
log.Fatalln(err)
}
dst := make([]byte, len(data))
c.XORKeyStream(dst, data)
return dst return dst
} }

View File

@ -18,7 +18,7 @@ func main() {
flag.BoolVar(&config.ServerMode, "S", false, "server mode") flag.BoolVar(&config.ServerMode, "S", false, "server mode")
flag.BoolVar(&config.TLS, "t", false, "enable tls") flag.BoolVar(&config.TLS, "t", false, "enable tls")
flag.Parse() flag.Parse()
config.Init()
switch config.Protocol { switch config.Protocol {
case "udp": case "udp":
if config.ServerMode { if config.ServerMode {

View File

@ -17,7 +17,6 @@ import (
// StartUDPServer start udp server // StartUDPServer start udp server
func StartUDPServer(config config.Config) { func StartUDPServer(config config.Config) {
config.Init()
iface := tun.CreateTun(config.CIDR) iface := tun.CreateTun(config.CIDR)
localAddr, err := net.ResolveUDPAddr("udp", config.LocalAddr) localAddr, err := net.ResolveUDPAddr("udp", config.LocalAddr)
if err != nil { if err != nil {
@ -39,8 +38,7 @@ func StartUDPServer(config config.Config) {
if err != nil || n == 0 { if err != nil || n == 0 {
continue continue
} }
// decrypt data b := cipher.XOR(buf[:n])
b := cipher.Decrypt(buf[:n])
if !waterutil.IsIPv4(b) { if !waterutil.IsIPv4(b) {
continue continue
} }
@ -77,8 +75,7 @@ func (f *Forwarder) forward(iface *water.Interface, conn *net.UDPConn) {
key := fmt.Sprintf("%v->%v", dstAddr, srcAddr) key := fmt.Sprintf("%v->%v", dstAddr, srcAddr)
v, ok := f.connCache.Get(key) v, ok := f.connCache.Get(key)
if ok { if ok {
// encrypt data b = cipher.XOR(b)
b = cipher.Encrypt(b)
f.localConn.WriteToUDP(b, v.(*net.UDPAddr)) f.localConn.WriteToUDP(b, v.(*net.UDPAddr))
} }
} }

View File

@ -30,7 +30,6 @@ var upgrader = websocket.Upgrader{
// StartWSServer start ws server // StartWSServer start ws server
func StartWSServer(config config.Config) { func StartWSServer(config config.Config) {
config.Init()
iface := tun.CreateTun(config.CIDR) iface := tun.CreateTun(config.CIDR)
c := cache.New(30*time.Minute, 10*time.Minute) c := cache.New(30*time.Minute, 10*time.Minute)
go tunToWs(iface, c) go tunToWs(iface, c)
@ -128,7 +127,7 @@ func tunToWs(iface *water.Interface, c *cache.Cache) {
key := fmt.Sprintf("%v->%v", dstAddr, srcAddr) key := fmt.Sprintf("%v->%v", dstAddr, srcAddr)
v, ok := c.Get(key) v, ok := c.Get(key)
if ok { if ok {
b = cipher.Encrypt(b) b = cipher.XOR(b)
v.(*websocket.Conn).WriteMessage(websocket.BinaryMessage, b) v.(*websocket.Conn).WriteMessage(websocket.BinaryMessage, b)
} }
} }
@ -142,7 +141,7 @@ func wsToTun(wsConn *websocket.Conn, iface *water.Interface, c *cache.Cache) {
if err != nil || err == io.EOF { if err != nil || err == io.EOF {
break break
} }
b = cipher.Decrypt(b) b = cipher.XOR(b)
if !waterutil.IsIPv4(b) { if !waterutil.IsIPv4(b) {
continue continue
} }