Skip to content

Instantly share code, notes, and snippets.

@citrus-lemon
Forked from chopachom/proxy.go
Last active May 11, 2018 16:12
Show Gist options
  • Save citrus-lemon/235977216dec0b39b4e1e12ebf03f0b1 to your computer and use it in GitHub Desktop.
Save citrus-lemon/235977216dec0b39b4e1e12ebf03f0b1 to your computer and use it in GitHub Desktop.
Simple TCP proxy in Golang
package main
import (
"flag"
"fmt"
"io"
"net"
)
var localAddress *string = flag.String("l", "localhost:9999", "Local address")
var remoteAddress *string = flag.String("r", "localhost:5000", "Remote address")
func main() {
flag.Parse()
fmt.Printf("Listening: %v\nProxying %v\n", *localAddress, *remoteAddress)
addr, err := net.ResolveTCPAddr("tcp", *localAddress)
if err != nil {
panic(err)
}
listener, err := net.ListenTCP("tcp", addr)
if err != nil {
panic(err)
}
for {
conn, err := listener.AcceptTCP()
if err != nil {
panic(err)
}
go proxyConnection(conn)
}
}
func proxyConnection(conn *net.TCPConn) {
rAddr, err := net.ResolveTCPAddr("tcp", *remoteAddress)
if err != nil {
panic(err)
}
rConn, err := net.DialTCP("tcp", nil, rAddr)
if err != nil {
panic(err)
}
defer rConn.Close()
go io.Copy(conn, rConn)
io.Copy(rConn, conn)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment