Skip to content

Instantly share code, notes, and snippets.

@HamzaAnis
Last active March 12, 2020 18:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HamzaAnis/ddd1e03b2df6484484b2d27e7a1f0f47 to your computer and use it in GitHub Desktop.
Save HamzaAnis/ddd1e03b2df6484484b2d27e7a1f0f47 to your computer and use it in GitHub Desktop.
package main
import (
"flag"
"fmt"
"io"
"log"
"net"
"os"
"os/signal"
)
var (
target string
port int
)
func init() {
flag.StringVar(&target, "target", "", "the target (<host>:<port>)")
flag.IntVar(&port, "port", 7757, "the tunnelthing port")
}
func main() {
flag.Parse()
signals := make(chan os.Signal, 1)
stop := make(chan bool)
signal.Notify(signals, os.Interrupt)
go func() {
for _ = range signals {
fmt.Println("\nReceived an interrupt, stopping...")
stop <- true
}
}()
incoming, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil {
log.Fatalf("could not start server on %d: %v", port, err)
}
fmt.Printf("server running on %d\n", port)
client, err := incoming.Accept()
if err != nil {
log.Fatal("could not accept client connection", err)
}
defer client.Close()
fmt.Printf("client '%v' connected!\n", client.RemoteAddr())
target, err := net.Dial("tcp", target)
if err != nil {
log.Fatal("could not connect to target", err)
}
defer target.Close()
fmt.Printf("connection to server %v established!\n", target.RemoteAddr())
go func() { io.Copy(target, client) }()
go func() { io.Copy(client, target) }()
<-stop
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment