I am currently developing a web app which has a part where i have to open a specific machine through VNC to monitor its desktop.
I am required to have a web-based VNC client, which means it shouldn't install a server or any other file on the client's side. The client just opens the web browser and puts the IP of the targeted machine to open in the browser and thus runs a web-based VNC client.
What are good resources to get started in this field?
UPDATE 2013-10-29
Just FYI: back then I ended up using guacamole as @Dolph recommended.
It was:
- very easy to set up
- very easy to follow its code and reverse-engineer it (as long as you know java)
- it is still used at the company I used to work for and is robust
Check out the Guacamole project:
Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC and RDP. We call it clientless because no plugins or client software are required. Thanks to HTML5, once Guacamole is installed on a server, all you need to access your desktops is a web browser.
On the downside, it requires a Java server to proxy through. However, this should be trivial, even if you don't already have a Java server up and running (Tomcat is pretty simple, and Guacamole's instructions are straightforward):
Guacamole is separated into two pieces: guacamole-server, which provides the guacd proxy and related libraries, and guacamole-client, which provides the client to be served by your servlet container, usually Tomcat.
guacamole-client is available in binary form, but guacamole-server must be built from source. Don't be discouraged: building the components of Guacamole from source is not as difficult as it sounds, and the build process is automated. You just need to be sure you have the necessary tools installed ahead of time. With the necessary dependencies in place, building Guacamole only takes a few minutes.
There are various solutions, but none of them will allow a 100% plain web app (i.e. no Flash, Java or ActiveX) to connect directly to a 100% plain VNC server. The biggest issue is that web browsers cannot make plain TCP connections. The closest thing is the incomplete WebSockets standard, but even that is a framed protocol that has a HTTP-like handshake to initiate it.
Even though Adobe Flash programs can make plain TCP connections, they still require that the server you are connecting to answer with a policy file either on port 843 or the port you are connecting to (http://code.google.com/p/doctype/wiki/ArticleFlashSecurity).
As has been noted, Guacamole requires a Java proxy to communicate between their HTML5 based interface and the VNC server.
Another option is noVNC (github) which has a full VNC client implementation in Javascript/HTML5 (unlike Guacamole where the VNC protocol is in the proxy). However, noVNC is still limited by the fact that Javascript cannot make plain TCP connections. noVNC uses WebSockets to connect to the server. noVNC includes a generic WebSockets to TCP bridge that you can run on the server (or the client for that matter) and it has no extra dependencies to install.
Update: QEMU, PocketVNC and projects derived from LibVNCServer now have built-in WebSocket server support so the websockify bridge is not needed to connect with noVNC. Also, I forgot to note as a disclaimer that I created noVNC.
Try tightVNC.com. The last time i used it you could just point it at the IP of the machine and use it in your browser.
try PeerVNC, that's web-based vnc client and support proxy to any existing VNC server.
https://github.com/InstantWebP2P/peer-vnc
Maybe you will approach with this solution - http://www.onlinevnc.com? As far as i can see they have solved the problem for Flash Security when Flash can not establish a direct connection to VNC TCP/IP port.
Also I saw on their website offer to integrate viewer in any other web site or application.
In addition to Dolph's answer, there is this, a Java applet for connecting to VNC servers.