go实现:基础 TCP 服务器
package main
import (
"bufio"
"log"
"net"
)
func main() {
server, err := net.Listen("tcp", "127.0.0.1:1080")
if err != nil {
panic(err)
}
for {
client, err := server.Accept()
if err != nil {
log.Printf("Accept failed %v", err)
continue
}
go process(client)
}
}
func process(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
for {
b, err := reader.ReadByte()
if err != nil {
break
}
_, err = conn.Write([]byte{b})
if err != nil {
break
}
}
}
1.1. 代码结构分析
这是一个最基本的 TCP 代理服务器实现。它在本地的 127.0.0.1:1080 地址上监听 TCP 请求,并为每一个连接创建一个新的 goroutine 来处理。该服务器只是简单地实现了一个“回显”功能,即接收到的数据会被原封不动地写回到客户端。
主要功能:
- 使用
net.Listen在指定端口上监听连接。 - 对每一个连接,使用
bufio.NewReader来读取客户端的数据。 - 数据会被简单地读取(通过
ReadByte)并通过Write方法返回给客户端。
问题:
- 此代码没有对客户端请求做任何协议处理,它仅仅实现了一个 TCP 回显服务器,不具备 SOCKS5 协议的任何功能。
1.2. 代码扩展需求
为了使其成为一个 SOCKS5 代理服务器,我们需要添加 SOCKS5 协议的握手过程、认证方式、命令解析以及目标连接功能。接下来,我们将逐步在此基础上进行迭代。