summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go46
1 files changed, 46 insertions, 0 deletions
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)
+ }
+}