diff --git a/proxy/cmd/main.go b/proxy/cmd/main.go index 1e1bbe8..2d4b755 100644 --- a/proxy/cmd/main.go +++ b/proxy/cmd/main.go @@ -14,8 +14,9 @@ func main() { var wsPort = flag.String("wsPort", "", "websocket port") var vncPass = flag.String("vncPass", "", "password on incoming vnc connections to the proxy, defaults to no password") var recordDir = flag.String("recDir", "", "path to save FBS recordings WILL NOT RECORD if not defined.") - var targetVncPort = flag.String("targPort", "", "target vnc server port") - var targetVncHost = flag.String("targHost", "", "target vnc server host") + var targetVnc = flag.String("target", "", "target vnc server (host:port or /path/to/unix.socket)") + var targetVncPort = flag.String("targPort", "", "target vnc server port (deprecated, use -target)") + var targetVncHost = flag.String("targHost", "", "target vnc server host (deprecated, use -target)") var targetVncPass = flag.String("targPass", "", "target vnc password") var logLevel = flag.String("logLevel", "info", "change logging level") @@ -28,8 +29,8 @@ func main() { os.Exit(1) } - if *targetVncPort == "" { - logger.Error("no target vnc server port defined") + if *targetVnc == "" && *targetVncPort == "" { + logger.Error("no target vnc server host/port or socket defined") flag.Usage() os.Exit(1) } @@ -48,6 +49,7 @@ func main() { TcpListeningUrl: tcpUrl, ProxyVncPassword: *vncPass, //empty = no auth SingleSession: &vncproxy.VncSession{ + Target: *targetVnc, TargetHostname: *targetVncHost, TargetPort: *targetVncPort, TargetPassword: *targetVncPass, //"vncPass", diff --git a/proxy/proxy.go b/proxy/proxy.go index ed14ab2..8198ef5 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -24,8 +24,17 @@ type VncProxy struct { sessionManager *SessionManager } -func (vp *VncProxy) createClientConnection(targetServerUrl string, vncPass string) (*client.ClientConn, error) { - nc, err := net.Dial("tcp", targetServerUrl) +func (vp *VncProxy) createClientConnection(target string, vncPass string) (*client.ClientConn, error) { + var ( + nc net.Conn + err error + ) + + if target[0] == '/' { + nc, err = net.Dial("unix", target) + } else { + nc, err = net.Dial("tcp", target) + } if err != nil { logger.Errorf("error connecting to vnc server: %s", err) @@ -85,7 +94,12 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server session.Status = SessionStatusInit if session.Type == SessionTypeProxyPass || session.Type == SessionTypeRecordingProxy { - cconn, err := vp.createClientConnection(session.TargetHostname+":"+session.TargetPort, session.TargetPassword) + target := session.Target + if session.TargetHostname != "" && session.TargetPort != "" { + target = session.TargetHostname + ":" + session.TargetPort + } + + cconn, err := vp.createClientConnection(target, session.TargetPassword) if err != nil { session.Status = SessionStatusError logger.Errorf("Proxy.newServerConnHandler error creating connection: %s", err) diff --git a/proxy/vnc-session.go b/proxy/vnc-session.go index eae8a73..dd8ac64 100644 --- a/proxy/vnc-session.go +++ b/proxy/vnc-session.go @@ -16,6 +16,7 @@ const ( ) type VncSession struct { + Target string TargetHostname string TargetPort string TargetPassword string