mirror of
				https://github.com/amitbet/vncproxy.git
				synced 2025-10-31 00:58:48 +00:00 
			
		
		
		
	Merge pull request #1 from exoscale/feature/unixsock-target
Add support for UNIX socket VNC target
This commit is contained in:
		| @@ -14,8 +14,9 @@ func main() { | |||||||
| 	var wsPort = flag.String("wsPort", "", "websocket port") | 	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 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 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 targetVnc = flag.String("target", "", "target vnc server (host:port or /path/to/unix.socket)") | ||||||
| 	var targetVncHost = flag.String("targHost", "", "target vnc server host") | 	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 targetVncPass = flag.String("targPass", "", "target vnc password") | ||||||
| 	var logLevel = flag.String("logLevel", "info", "change logging level") | 	var logLevel = flag.String("logLevel", "info", "change logging level") | ||||||
|  |  | ||||||
| @@ -28,8 +29,8 @@ func main() { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if *targetVncPort == "" { | 	if *targetVnc == "" && *targetVncPort == "" { | ||||||
| 		logger.Error("no target vnc server port defined") | 		logger.Error("no target vnc server host/port or socket defined") | ||||||
| 		flag.Usage() | 		flag.Usage() | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| @@ -48,6 +49,7 @@ func main() { | |||||||
| 		TcpListeningUrl:  tcpUrl, | 		TcpListeningUrl:  tcpUrl, | ||||||
| 		ProxyVncPassword: *vncPass, //empty = no auth | 		ProxyVncPassword: *vncPass, //empty = no auth | ||||||
| 		SingleSession: &vncproxy.VncSession{ | 		SingleSession: &vncproxy.VncSession{ | ||||||
|  | 			Target:         *targetVnc, | ||||||
| 			TargetHostname: *targetVncHost, | 			TargetHostname: *targetVncHost, | ||||||
| 			TargetPort:     *targetVncPort, | 			TargetPort:     *targetVncPort, | ||||||
| 			TargetPassword: *targetVncPass, //"vncPass", | 			TargetPassword: *targetVncPass, //"vncPass", | ||||||
|   | |||||||
| @@ -24,8 +24,17 @@ type VncProxy struct { | |||||||
| 	sessionManager   *SessionManager | 	sessionManager   *SessionManager | ||||||
| } | } | ||||||
|  |  | ||||||
| func (vp *VncProxy) createClientConnection(targetServerUrl string, vncPass string) (*client.ClientConn, error) { | func (vp *VncProxy) createClientConnection(target string, vncPass string) (*client.ClientConn, error) { | ||||||
| 	nc, err := net.Dial("tcp", targetServerUrl) | 	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 { | 	if err != nil { | ||||||
| 		logger.Errorf("error connecting to vnc server: %s", err) | 		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 | 	session.Status = SessionStatusInit | ||||||
| 	if session.Type == SessionTypeProxyPass || session.Type == SessionTypeRecordingProxy { | 	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 { | 		if err != nil { | ||||||
| 			session.Status = SessionStatusError | 			session.Status = SessionStatusError | ||||||
| 			logger.Errorf("Proxy.newServerConnHandler error creating connection: %s", err) | 			logger.Errorf("Proxy.newServerConnHandler error creating connection: %s", err) | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ const ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type VncSession struct { | type VncSession struct { | ||||||
|  | 	Target         string | ||||||
| 	TargetHostname string | 	TargetHostname string | ||||||
| 	TargetPort     string | 	TargetPort     string | ||||||
| 	TargetPassword string | 	TargetPassword string | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user