diff options
| author | Horus3 | 2015-05-27 04:19:00 +0200 |
|---|---|---|
| committer | Horus3 | 2015-05-27 04:19:00 +0200 |
| commit | 3b8ad8daaebee435b482bcd7867a22a51f29ead0 (patch) | |
| tree | 49e54e5d42e72cbd4144f50cf1263b00c4c406b7 | |
| download | go-tcp-proxy-3b8ad8daaebee435b482bcd7867a22a51f29ead0.tar.gz | |
Initial commit.
| -rw-r--r-- | main.go | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -0,0 +1,46 @@ +package main + +import ( + "flag" + "fmt" + "io" + "net" + "os" +) + +func main() { + + localAddr := flag.String("l", "192.168.122.110:3306", "local address we listen on") + remoteAddr := flag.String("r", "127.0.0.1:3306", "remote address we proxy to") + verbose := flag.Bool("v", false, "log connection") + + flag.Parse() + + local, err := net.Listen("tcp", *localAddr) + if err != nil { + fmt.Fprintf(os.Stderr, "listening failed: %s \n", err.Error()) + os.Exit(-1) + } + for { + conn, err := local.Accept() + if err != nil { + fmt.Fprintf(os.Stderr, "accepting failed: %s", err.Error()) + os.Exit(-1) + } + go forward(conn, *remoteAddr, *verbose) + } +} + +func forward(local net.Conn, remoteAddr string, verbose bool) { + remote, err := net.Dial("tcp", remoteAddr) + if err != nil { + fmt.Fprintf(os.Stderr, "remote dial failed: %s\n", err.Error()) + return + } + go io.Copy(local, remote) + go io.Copy(remote, local) + + if verbose { + fmt.Println("message from: " + remoteAddr) + } +} |
