45 lines
651 B
Go
45 lines
651 B
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net"
|
|
|
|
"github.com/goburrow/netforward"
|
|
"tailscale.com/tsnet"
|
|
)
|
|
|
|
var (
|
|
host_proto = flag.Arg(0)
|
|
hostname = flag.Arg(1)
|
|
host_port = flag.Arg(2)
|
|
dst_proto = flag.Arg(3)
|
|
dst_addr = flag.Arg(4)
|
|
)
|
|
|
|
type Dialer struct{}
|
|
|
|
func (dialer Dialer) Dial() (net.Conn, error) {
|
|
return net.Dial(dst_proto, dst_addr)
|
|
}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
s := &tsnet.Server{
|
|
Hostname: hostname,
|
|
}
|
|
defer s.Close()
|
|
|
|
ln, err := s.Listen(host_proto, fmt.Sprint(":", host_port))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer ln.Close()
|
|
err = netforward.Forward(Dialer{}, ln)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|