summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHorus32015-05-27 04:19:00 +0200
committerHorus32015-05-27 04:19:00 +0200
commit3b8ad8daaebee435b482bcd7867a22a51f29ead0 (patch)
tree49e54e5d42e72cbd4144f50cf1263b00c4c406b7
downloadgo-tcp-proxy-3b8ad8daaebee435b482bcd7867a22a51f29ead0.tar.gz
Initial commit.
-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)
+ }
+}