Skip to content

Instantly share code, notes, and snippets.

@mike-weiner
Last active August 31, 2025 18:38
Show Gist options
  • Select an option

  • Save mike-weiner/0805a38bbc4c9fcc70506476d66ea7e8 to your computer and use it in GitHub Desktop.

Select an option

Save mike-weiner/0805a38bbc4c9fcc70506476d66ea7e8 to your computer and use it in GitHub Desktop.
A very basic SSH proxy using Go to simulate a client connection sending a TCP RST.
// Replace `<server-ip>` with your real endpoint.
// Use `go run ssh-proxy.go` for a healthy proxy.
// Use `go run ssh-proxy.go --broken` for a proxy that closes the connection.
package main
import (
"flag"
"io"
"log"
"net"
)
func handleConnection(clientConn net.Conn, target string, broken bool) {
defer clientConn.Close()
serverConn, err := net.Dial("tcp", target)
if err != nil {
log.Printf("Failed to connect to target: %v", err)
return
}
defer serverConn.Close()
if broken {
// Broken behavior: immediately close to simulate TCP RST
log.Printf("[BROKEN] Resetting connection from %s to %s", clientConn.RemoteAddr(), target)
return
}
// Working behavior: forward traffic
log.Printf("[WORKING] Forwarding connection from %s to %s", clientConn.RemoteAddr(), target)
go io.Copy(serverConn, clientConn)
io.Copy(clientConn, serverConn)
}
func main() {
listenAddr := flag.String("listen", ":2222", "Proxy listen address")
targetAddr := flag.String("target", "<server-ip>:22", "Target address to forward to")
broken := flag.Bool("broken", false, "Start in broken mode (immediate reset)")
flag.Parse()
ln, err := net.Listen("tcp", *listenAddr)
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
log.Printf("Proxy listening on %s, forwarding to %s (broken=%v)", *listenAddr, *targetAddr, *broken)
for {
clientConn, err := ln.Accept()
if err != nil {
log.Printf("Accept error: %v", err)
continue
}
go handleConnection(clientConn, *targetAddr, *broken)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment