Я пытаюсь создать TCP-прокси / маршрутизатор, мне нужно перехватить некоторые данные запроса, чтобы шаблон соответствовал правилу маршрутизации.
Но я немного новичок в Голанге. Теперь переадресация портов работает, но когда я пытаюсь прочитать входящий запрос, я не могу воспроизвести входящие данные на удаленный порт.
Блок с комментариями находится там, где он выходит из строя.
package main
import (
"fmt"
"io"
"net"
"os"
)
func main() {
fmt.Println(os.Args)
if len(os.Args) != 4 {
fmt.Println("prog listen_port remote_host, remote_port")
os.Exit(3)
}
listen_port := os.Args[1]
rmt_host := os.Args[2]
rmt_port := os.Args[3]
fmt.Println("localhost:" + listen_port + " -> " + rmt_host+":"+rmt_port)
ln, err := net.Listen("tcp", ":"+listen_port)
if err != nil {
panic(err)
}
for {
conn, err := ln.Accept()
if err != nil {
panic(err)
}
go handleRequest(conn, rmt_host, rmt_port)
}
}
func handleRequest(conn net.Conn, rmt_host string, rmt_port string) {
proxy, err := net.Dial("tcp", rmt_host+":"+rmt_port)
if err != nil {
panic(err)
}
/* //enable this part = fails, able to read the request, but not replay it.
buffer := make([]byte, 60000)
conn.Read(buffer)
s := string(buffer)
fmt.Println(s)
*/
go copyIO(conn, proxy)
go copyIO(proxy, conn)
}
func copyIO(src, dest net.Conn) {
defer src.Close()
defer dest.Close()
io.Copy(src, dest)
}
Может кто-нибудь указать мне направление?