在Golang中,可以使用net包实现TCP代理。代码示例:
go
// TCP代理服务器
func handleProxy(client net.Conn) {
// 连接远程服务器
server, err := net.Dial("tcp", "example.com:80")
if err != nil {
return
}
// 启动转发goroutine
go func() {
io.Copy(server, client) // 发送数据到远程服务器
server.Close() // 关闭远程连接
}()
io.Copy(client, server) // 将响应发送回客户端
client.Close() // 关闭客户端连接
}
func main() {
// 监听本地8080端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal(err)
}
go handleProxy(conn)
}
}
TCP代理服务器会监听本地8080端口,接受TCP连接请求,然后与远程服务器建立连接,并实现两端的数据传输,实现TCP代理的功能。
go
// TCP客户端
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
log.Fatal(err)
}