Skip to content

Instantly share code, notes, and snippets.

@oxtoacart
Created August 31, 2023 12:33
Show Gist options
  • Save oxtoacart/a30aa13c7ae72848cd4bc176be260ec2 to your computer and use it in GitHub Desktop.
Save oxtoacart/a30aa13c7ae72848cd4bc176be260ec2 to your computer and use it in GitHub Desktop.
Simple tcp proxy to a single origin address
package main
import (
"log"
"net"
"os"
"github.com/getlantern/netx"
)
func main() {
addr := os.Args[1]
log.Printf("will forward to %s", addr)
l, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
log.Printf("listening at %s", l.Addr())
for {
in, err := l.Accept()
if err != nil {
log.Printf("unable to accept connection: %v", err)
continue
}
go func() {
defer in.Close()
log.Printf("dialing %s", addr)
out, err := net.Dial("tcp", addr)
if err != nil {
log.Printf("unable to connect to %s: %v", addr, err)
return
}
defer out.Close()
inErr, outErr := netx.BidiCopy(out, in, make([]byte, 50), make([]byte, 50))
log.Printf("inErr: %v\n", inErr)
log.Printf("outErr: %v\n", outErr)
}()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment