diff --git a/src/sessionmanagerplugin/session/portsession/basicportforwarding.go b/src/sessionmanagerplugin/session/portsession/basicportforwarding.go index 65f1057c..45b22e82 100644 --- a/src/sessionmanagerplugin/session/portsession/basicportforwarding.go +++ b/src/sessionmanagerplugin/session/portsession/basicportforwarding.go @@ -143,6 +143,10 @@ func (p *BasicPortForwarding) startLocalConn(log log.T) (err error) { // startLocalListener starts a local listener to given address func (p *BasicPortForwarding) startLocalListener(log log.T, portNumber string) (listener net.Listener, err error) { var displayMessage string + localListenerAddress := p.portParameters.LocalListenerAddress + if localListenerAddress == "" { + localListenerAddress = "localhost" + } switch p.portParameters.LocalConnectionType { case "unix": if listener, err = getNewListener(p.portParameters.LocalConnectionType, p.portParameters.LocalUnixSocket); err != nil { @@ -150,7 +154,7 @@ func (p *BasicPortForwarding) startLocalListener(log log.T, portNumber string) ( } displayMessage = fmt.Sprintf("Unix socket %s opened for sessionId %s.", p.portParameters.LocalUnixSocket, p.sessionId) default: - if listener, err = getNewListener("tcp", "localhost:"+portNumber); err != nil { + if listener, err = getNewListener("tcp", localListenerAddress+":"+portNumber); err != nil { return } // get port number the TCP listener opened diff --git a/src/sessionmanagerplugin/session/portsession/muxportforwarding.go b/src/sessionmanagerplugin/session/portsession/muxportforwarding.go index 85fe0ce6..d85ba3ad 100644 --- a/src/sessionmanagerplugin/session/portsession/muxportforwarding.go +++ b/src/sessionmanagerplugin/session/portsession/muxportforwarding.go @@ -242,7 +242,11 @@ func (p *MuxPortForwarding) handleClientConnections(log log.T, ctx context.Conte if p.portParameters.LocalPortNumber == "" { localPortNumber = "0" } - if listener, err = net.Listen("tcp", "localhost:"+localPortNumber); err != nil { + localListenerAddress := p.portParameters.LocalListenerAddress + if localListenerAddress == "" { + localListenerAddress = "localhost" + } + if listener, err = net.Listen("tcp", localListenerAddress+":"+localPortNumber); err != nil { return err } p.portParameters.LocalPortNumber = strconv.Itoa(listener.Addr().(*net.TCPAddr).Port) diff --git a/src/sessionmanagerplugin/session/portsession/portsession.go b/src/sessionmanagerplugin/session/portsession/portsession.go index 793b6a74..61853166 100644 --- a/src/sessionmanagerplugin/session/portsession/portsession.go +++ b/src/sessionmanagerplugin/session/portsession/portsession.go @@ -42,11 +42,12 @@ type IPortSession interface { } type PortParameters struct { - PortNumber string `json:"portNumber"` - LocalPortNumber string `json:"localPortNumber"` - LocalUnixSocket string `json:"localUnixSocket"` - LocalConnectionType string `json:"localConnectionType"` - Type string `json:"type"` + PortNumber string `json:"portNumber"` + LocalPortNumber string `json:"localPortNumber"` + LocalUnixSocket string `json:"localUnixSocket"` + LocalConnectionType string `json:"localConnectionType"` + LocalListenerAddress string `json:"localListenerAddress"` + Type string `json:"type"` } func init() {