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

View File

@ -405,6 +405,7 @@ func (c *udpServerConn) SetWriteDeadline(t time.Time) error {
type tcpRemoteForwardListener struct {
addr net.Addr
chain *Chain
ln net.Listener
closed chan struct{}
}
@ -463,7 +464,13 @@ func (l *tcpRemoteForwardListener) accept() (conn net.Conn, err error) {
cc.Close()
}
} 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
}