Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
network port forwarding in go lang
package main
import (
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
for {
conn, err := ln.Accept()
if err != nil {
go handleRequest(conn)
func handleRequest(conn net.Conn) {
fmt.Println("new client")
proxy, err := net.Dial("tcp", "")
if err != nil {
fmt.Println("proxy connected")
go copyIO(conn, proxy)
go copyIO(proxy, conn)
func copyIO(src, dest net.Conn) {
defer src.Close()
defer dest.Close()
io.Copy(src, dest)
Copy link

masbur commented Jul 24, 2022

Hi @qhwa

Great concept.
I have a question, how to capture request and response header ?
I want to check that header and then split into several destinations.
For example:

  • header contains "websocket" dial to localhost port 8880
  • header contains "cloudflare" dial to localhost port 8000
  • etc.

Copy link

qhwa commented Jul 24, 2022

Hi @masbur

I think other than a simple port-forwarding, what you want is a reverse proxy. In that case, there are some resources, such as this and this on top of reverseproxy.go.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment