Skip to content

Commit 3de1b46

Browse files
authored
feat: implement XOR encryption for tunnel signals in client and server communication
1 parent 2083301 commit 3de1b46

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

internal/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ package internal
33

44
import (
55
"bufio"
6+
"bytes"
67
"context"
78
"net"
89
"net/url"
910
"os"
1011
"os/signal"
11-
"strings"
1212
"syscall"
1313
"time"
1414

@@ -122,7 +122,7 @@ func (c *Client) tunnelHandshake() error {
122122
if err != nil {
123123
return err
124124
}
125-
tunnelSignal := strings.TrimSpace(string(rawTunnelURL))
125+
tunnelSignal := string(xor(bytes.TrimSuffix(rawTunnelURL, []byte{'\n'})))
126126
c.logger.Debug("Tunnel signal <- : %v <- %v", tunnelSignal, c.tunnelTCPConn.RemoteAddr())
127127

128128
// 解析隧道URL

internal/common.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package internal
33

44
import (
55
"bufio"
6+
"bytes"
67
"context"
78
"net"
89
"net/url"
@@ -78,6 +79,14 @@ func getEnvAsDuration(name string, defaultValue time.Duration) time.Duration {
7879
return defaultValue
7980
}
8081

82+
// xor 对数据进行异或处理
83+
func xor(data []byte) []byte {
84+
for i := range data {
85+
data[i] ^= byte(128)
86+
}
87+
return data
88+
}
89+
8190
// getAddress 解析和设置地址信息
8291
func (c *Common) getAddress(parsedURL *url.URL) {
8392
// 解析隧道地址
@@ -274,7 +283,7 @@ func (c *Common) commonQueue() error {
274283
if err != nil {
275284
return err
276285
}
277-
signal := strings.TrimSpace(string(rawSignal))
286+
signal := string(xor(bytes.TrimSuffix(rawSignal, []byte{'\n'})))
278287

279288
// 将信号发送到通道
280289
select {
@@ -301,7 +310,7 @@ func (c *Common) healthCheck() error {
301310
// 连接池健康度检查
302311
if c.tunnelPool.ErrorCount() > c.tunnelPool.Active()/2 {
303312
// 发送刷新信号到对端
304-
_, err := c.tunnelTCPConn.Write([]byte(flushURL.String() + "\n"))
313+
_, err := c.tunnelTCPConn.Write(append(xor([]byte(flushURL.String())), '\n'))
305314
if err != nil {
306315
c.mu.Unlock()
307316
return err
@@ -390,7 +399,7 @@ func (c *Common) commonTCPLoop() {
390399
}
391400

392401
c.mu.Lock()
393-
_, err = c.tunnelTCPConn.Write([]byte(launchURL.String() + "\n"))
402+
_, err = c.tunnelTCPConn.Write(append(xor([]byte(launchURL.String())), '\n'))
394403
c.mu.Unlock()
395404

396405
if err != nil {
@@ -457,7 +466,7 @@ func (c *Common) commonUDPLoop() {
457466
}
458467

459468
c.mu.Lock()
460-
_, err = c.tunnelTCPConn.Write([]byte(launchURL.String() + "\n"))
469+
_, err = c.tunnelTCPConn.Write(append(xor([]byte(launchURL.String())), '\n'))
461470
c.mu.Unlock()
462471

463472
if err != nil {

internal/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func (s *Server) tunnelHandshake() error {
130130
Host: s.dataFlow,
131131
Fragment: s.tlsCode,
132132
}
133-
_, err = s.tunnelTCPConn.Write([]byte(tunnelURL.String() + "\n"))
133+
_, err = s.tunnelTCPConn.Write(append(xor([]byte(tunnelURL.String())), '\n'))
134134
if err != nil {
135135
return err
136136
}

0 commit comments

Comments
 (0)