TCP remote forwarding with chain

This commit is contained in:
rui.zheng 2017-08-01 21:43:39 +08:00
parent 88c204899b
commit 46cb9af130
2 changed files with 27 additions and 17 deletions

View File

@ -34,8 +34,8 @@ func main() {
go wsServer() go wsServer()
go wssServer() go wssServer()
go kcpServer() go kcpServer()
// go tcpForwardServer() go tcpForwardServer()
// go rtcpForwardServer() go tcpRemoteForwardServer()
// go rudpForwardServer() // go rudpForwardServer()
// go tcpRedirectServer() // go tcpRedirectServer()
go sshTunnelServer() go sshTunnelServer()
@ -138,29 +138,32 @@ func tcpForwardServer() {
log.Fatal(s.Serve(ln, h)) log.Fatal(s.Serve(ln, h))
} }
func rtcpForwardServer() { func tcpRemoteForwardServer() {
s := &gost.Server{} s := &gost.Server{}
ln, err := gost.TCPRemoteForwardListener( ln, err := gost.TCPRemoteForwardListener(
":1222", ":1222",
gost.NewChain( /*
gost.Node{ gost.NewChain(
Protocol: "socks5", gost.Node{
Transport: "tcp", Protocol: "socks5",
Addr: "localhost:12345", Transport: "tcp",
User: url.UserPassword("admin", "123456"), Addr: "localhost:12345",
Client: &gost.Client{ User: url.UserPassword("admin", "123456"),
Connector: gost.SOCKS5Connector(url.UserPassword("admin", "123456")), Client: &gost.Client{
Transporter: gost.TCPTransporter(), Connector: gost.SOCKS5Connector(url.UserPassword("admin", "123456")),
Transporter: gost.TCPTransporter(),
},
}, },
}, ),
), */
nil,
) )
if err != nil { if err != nil {
log.Fatal() log.Fatal()
} }
h := gost.TCPRemoteForwardHandler( h := gost.TCPRemoteForwardHandler(
":1222", ":22",
gost.AddrHandlerOption("127.0.0.1:22"), //gost.AddrHandlerOption("127.0.0.1:22"),
) )
log.Fatal(s.Serve(ln, h)) log.Fatal(s.Serve(ln, h))
} }

View File

@ -405,6 +405,7 @@ func (c *udpServerConn) SetWriteDeadline(t time.Time) error {
type tcpRemoteForwardListener struct { type tcpRemoteForwardListener struct {
addr net.Addr addr net.Addr
chain *Chain chain *Chain
ln net.Listener
closed chan struct{} closed chan struct{}
} }
@ -463,7 +464,13 @@ func (l *tcpRemoteForwardListener) accept() (conn net.Conn, err error) {
cc.Close() cc.Close()
} }
} else { } else {
err = errors.New("invalid chain") if l.ln == nil {
l.ln, err = net.Listen("tcp", l.addr.String())
if err != nil {
return
}
}
conn, err = l.ln.Accept()
} }
return return
} }