From 3b8ad8daaebee435b482bcd7867a22a51f29ead0 Mon Sep 17 00:00:00 2001 From: Horus3 Date: Wed, 27 May 2015 04:19:00 +0200 Subject: Initial commit. --- main.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 main.go diff --git a/main.go b/main.go new file mode 100644 index 0000000..5ce452d --- /dev/null +++ b/main.go @@ -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) + } +} -- cgit v1.2.3