diff options
Diffstat (limited to 'main.go')
| -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) + } +} |
