Skip to content

Instantly share code, notes, and snippets.

@doracl
Created August 29, 2019 07:09
Show Gist options
  • Select an option

  • Save doracl/e2227f3420e0c3e3c7115bca475d102b to your computer and use it in GitHub Desktop.

Select an option

Save doracl/e2227f3420e0c3e3c7115bca475d102b to your computer and use it in GitHub Desktop.
golang tcp forward proxy
package main
import (
"io"
"log"
"net"
)
var localServerHost = "localhost:8880"
var remoteServerHost = "www.facebook.com:80"
func main() {
ln, err := net.Listen("tcp", localServerHost)
if err != nil {
log.Fatal(err)
}
log.Println("Port forwarding server up and listening on ", localServerHost)
for {
conn, err := ln.Accept()
if err != nil {
log.Fatal(err)
}
go handleConnection(conn)
}
}
func forward(src, dest net.Conn) {
defer src.Close()
defer dest.Close()
io.Copy(src, dest)
}
func handleConnection(c net.Conn) {
log.Println("Connection from : ", c.RemoteAddr())
remote, err := net.Dial("tcp", remoteServerHost)
if err != nil {
log.Fatal(err)
}
log.Println("Connected to ", remoteServerHost)
// go routines to initiate bi-directional communication for local server with a
// remote server
go forward(c, remote)
go forward(remote, c)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment