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:
You can use the VNC SDK to create an HTML 5-enabled Viewer app that will run in any desktop web browser*.
VNC Viewer does not have a network route to connect to the specified computer name/IP address. This error usually occurs when the IP address belongs to a different network to the network VNC Viewer is running on. Check that the computer name resolves to the correct IP address e.g. using nslookup.
For you to be able to access your VNC server through a browser over the internet, you have to have ports 5800 and 5900 of your hardware router pointing to the IP address of your VNC server machine. From your browser, open the following URL: http://<your vnc server ip address>:5800.
As a final thing to try, please try restarting VNC Server and/or the computer running VNC Server. In Windows, this can be done via the Services utility. For Mac/Linux, right click the VNC Server icon in the system tray (by the clock), and click Stop VNC Server. Then, launch VNC Server from your Applications menu.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With