Virtual Network Computing

Interface KDR de connexion à un serveur VNC

VNC (Virtual Network Computing, littéralement « informatique virtuelle en réseau ») est un système de visualisation et de contrôle de l'environnement de bureau d'un ordinateur distant. Il permet au logiciel client VNC de transmettre les informations de saisie du clavier et de la souris à l'ordinateur distant, possédant un logiciel serveur VNC à travers un réseau informatique. Il utilise le protocole RFB pour les communications.

VNC est indépendant du système d'exploitation : un client VNC installé sur n'importe quel système d'exploitation peut se connecter à un serveur VNC installé sur un système d'exploitation différent ou identique. Il existe des clients et des serveurs VNC pour la plupart des systèmes d'exploitation. Plusieurs clients peuvent se connecter en même temps à un unique serveur VNC.

Parmi les utilisations de ce protocole, on peut citer le support technique à distance, l'administration et la maintenance de systèmes ou logiciels ne permettant que des contrôles graphiques et demandant l'utilisation de la souris ou bien encore la visualisation distante d'applications diverses et variées, dans un but éducatif par exemple.

## Historique

[modifier | modifier le code]

VNC a été créé au laboratoire Olivetti & Oracle Research Lab, qui était alors la propriété de Olivetti et Oracle Corporation. En 1999, AT&T acheta le laboratoire, et en 2002 ferma la partie « recherche » de celui-ci[1].

VNC a été initialement développé dans les laboratoires AT&T de Cambridge. Le code source du programme VNC original est open source sous GPL, comme la plupart des variantes de VNC disponibles en 2010[réf. nécessaire].

Le nom provient de l'ATM Network Computer appelé Videotile, qui était un écran LCD avec un stylet tactile et une connexion ATM rapide sur un réseau. VNC est une version logicielle de cet ATM Network Computer.

## Fonctionnement

[modifier | modifier le code]

VNC se compose de deux parties, le client et le serveur.

* Le serveur est le programme fonctionnant sur l'ordinateur esclave, partageant à la fois la sortie à l'écran et les entrées de la souris et du clavier.
* Le client (appelé aussi visionneuse) est le programme fonctionnant sur l'ordinateur maître, qui permet de visualiser et éventuellement d'interagir avec le serveur en envoyant les informations de saisie, et uniquement si celui-ci l'autorise.

VNC se fonde sur le protocole Remote Frame Buffer (RFB), avec des fonctions du type « Insérer un rectangle de pixel à la position x,y donnée », la surface du bureau étant découpée en petites sections. Cette méthode, dans sa forme la plus simple, utilisant beaucoup de bande passante, plusieurs méthodes ont été ajoutées pour réduire cette utilisation. Il y a par exemple plusieurs formes d'encodage, et des méthodes pour déterminer quelle méthode est la plus efficace pour le réduire. Le RFB permet au client et au serveur de s'accorder sur la méthode d'encodage utilisée.

L'encodage le plus simple, qui est supporté par tous les clients et serveurs, est le raw encoding où les pixels sont transmis en brut, de gauche à droite puis par ligne de haut en bas. Lors de la connexion, l'écran est entièrement transféré, puis seules les zones de changement sont envoyées sous forme de rectangle. Ce type de méthode fonctionne assez bien lorsque seule une petite partie de l'écran change d'une image à l'autre (déplacement du pointeur ou texte tapé), mais la demande en bande passante augmente avec la taille de la surface modifiée, pouvant ainsi rapidement saturer le réseau. Le pire exemple est sans doute l'affichage d'une vidéo où la majorité de l'écran change en permanence.

Par défaut, VNC utilise les ports TCP prédéfinis par défaut de 5900 à 5906, chacun représentant l'écran virtuel X11 correspondant (ports de 6000 à 6006, pour les écrans de :0 à :6).

Cette section a besoin d'être recyclée (novembre 2012).
Une réorganisation et une clarification du contenu sont nécessaires. Améliorez-la ou discutez des points à améliorer.

Un client Java est disponible dans de nombreuses implémentations, comme RealVNC par exemple qui utilise les ports allant de 5800 à 5806 (ces ports pouvant être changés).

## UNIX et X11

[modifier | modifier le code]

Sur les systèmes Unix, comme Linux, l'affichage graphique se fait via le protocole X11. Les applications sont affichées par un serveur graphique X11. Celui-ci peut être distant au travers du protocole XDMCP. Dans ce cas, ce sont les applications qui sont considérées comme clients, cela peut prêter à confusion. XDMCP a l'avantage de transférer les fonctions plutôt que les images générées, sauf dans le cas d'images prédéfinies). Le protocole OpenGL y est supporté, allégeant également le besoin de transfert de lourdes images.

VNC y est donc moins utile, mais des clients comme des serveurs y existent cependant.

Le serveur X11 a également été porté sur d'autres systèmes d'exploitation, dont Windows, MacOS et Android.

## La sécurité avec VNC

[modifier | modifier le code]

Par défaut, le protocole VNC n'est pas sécurisé, les données transitent en clair et la connexion ne requiert pas d'identifiant.
Il est cependant possible avec certains logiciels compatibles VNC de chiffrer la transmission de données en SSL, et d'imposer la saisie d'identifiant et mot de passe.

VNC peut également être utilisé à travers un tunnel chiffré afin d'augmenter la sécurité, par exemple, via une connexion SSH ou VPN.

En mai 2006 un problème de sécurité (vulnérabilité (informatique)) a été identifié sur la version 4.1.1 de RealVNC Free edition qui permet à un pirate de prendre en main un PC sans connaître le mot de passe avec un VNC Viewer modifié. Cette faille de sécurité a été corrigée dans les versions ultérieures.

## Clients

[modifier | modifier le code]

### Libres

[modifier | modifier le code]

* Android-vnc-viewer (GPL v2) client pour Android.
* gvncviewer, client en C (avec binding python) basé sur la bibliothèque GTK+ supportant les chiffrements SSL et TLS via le protocole VeNCrypt, IPv4 et IPv6, ainsi que les versions 3.3 à 3.8 de RFB
* NoVNC, MPL v2, client en HTML5 (donc Unix, Windows, Mac et plateformes mobiles) utilisant les technologies websockets et canvas, supporte le chiffrement via SSL et TLS[2].
* pyvnc2swf, enregistre en vidéo au format Shockwave Flash (SWF) la visualisation l'écran du serveur VNC.
* Remmina, client en C pour environnement GNOME, basé sur un système de greffons supportant les protocoles de contrôle à distance RDP, VNC, NX, XDMCP et SSH.
* SSVNC[3] (ce logiciel se dit « Enhanced TightVNC Viewer »), compatible avec X11vnc, permet l'utilisation de SSL (via stunnel, de créer un tunnel SSH, mais également, de transmettre différents ports (audio, SMB pour le partage de fichiers, CUPS pour l'impression, etc.)
* TightVNC, GPL v2, client original, en C++, disponible pour Windows et Unix, il a été dérivé en Java sous le nom TightVNC-java, pouvant donc alors être utilisé sur n'importe quel système supportant Java, à condition d'utiliser la même version de l'interpréteur Java.
* TigerVNC, client dérivé de TightVNC[4].
* TurboVNC, client dérivé de TightVNC.
* UltraVNC (GPL v2) permet l'utilisation d'un plugin open-source de chiffrement. Il permet également une identification basée sur les comptes utilisateurs NTLM et Active Directory.
* Vinagre, client pour environnement GNOME supportant VNC, SSH et RDP
* virtviewer.
* xvnc4viewer.

### Propriétaires

[modifier | modifier le code]

* RealVNC propose un chiffrement (128 à 256 bits AES) dans ses versions commerciales.
* ScreenConnect (en)[5].
* Workspot (en) propose des correctifs permettant un chiffrement AES pour VNC.

## Serveurs

[modifier | modifier le code]

### Libres

[modifier | modifier le code]

* TigerVNC, est une solution client/serveur dérivée de TightVNC.
* TightVNCserver, (GPLv2, en java pour X11) chiffrement optimisé pour les connexions à faible débit.
* TurboVNC, est une solution client/serveur dérivée de TightVNC avec des optimisations 3D et vidéo ainsi que des optimisations sur l'encodage JPEG et Tight.
* UltraVNC (GPL v2) permet l'utilisation d'un plugin open-source de chiffrement. Il permet également une identification basée sur les comptes utilisateurs NTLM et Active Directory.
* Vino pour environnement GNOME.
* X11vnc (GPLv2, en c, pour X11), client officiel d'AT&T ; Chiffrement SSL, identifiant et mot de passe. Il permet les transferts de fichier aux formats UltraVNC et TightVNC.

### Propriétaires

[modifier | modifier le code]

* VMLite VNC server : serveur VNC pour android

## Notes et références

[modifier | modifier le code]

1. ↑ (en) « VNC Frequently Asked Questions (FAQ) » [archive du 2000], 1999
2. ↑ (en) « NoVNC », sur Github
3. ↑ « Ssvnc : SSL/SSH VNC viewer », sur sourceforge.net (consulté le 13 juin 2023).
4. ↑ (en) « TigerVNC », sur tigervnc.org
5. ↑ http://www.screenconnect.com/Compare-VNC-Alternative

## Annexes

[modifier | modifier le code]

### Bibliographie

[modifier | modifier le code]

* Tristan Richardson, Quentin Stafford-Fraser, Kenneth R. Wood & Andy Hopper, "Virtual Network Computing", IEEE Internet Computing, Vol.2 No.1, Jan/Feb 1998 p. 33-38 PDF format

### Articles connexes

[modifier | modifier le code]

#### Technologies similaires

[modifier | modifier le code]

* Remote Desktop Protocol
* Technologie NX
* XDMCP
* (en) Comparaison des logiciels de bureau à distance: offre une comparaison des différents outils de prise de contrôle à distance. Elle couvre les principales variantes de VNC, mais aussi des logiciels qui utilisent d'autres protocoles (RDP par exemple).

#### Thèmes relatifs

[modifier | modifier le code]

* Assistance à distance
* Bureau à distance
* Client-serveur
* Client léger

### Liens externes

[modifier | modifier le code]

* TightVNC, client original, libre en c (pour Microsoft Windows et Unix) et en java
* NoVNC client HTML5 libre.
* RealVNC
* Win2vnc x2vnc, GPL v2, permettant respectivement sous Windows (95/98/NT/2000/XP) et X11 de se connecter à plusieurs serveur VNC et de les voir comme des bureaux virtuels locaux. Il permet également de partager le presse-papier entre les différents serveurs (locaux ou distants).

v · m

Outil d'administration à distance

Général |

* Bureau à distance
* Télémaintenance
* Téléassistance

Implémentations |

* Ammyy Admin
* AnyDesk (en)
* Apple Remote Desktop
* Assistance à distance Windows
* Bomgar (en)
* Chrome Remote Desktop
* Citrix Systems
* Commutateur écran-clavier-souris (KVM)
* DameWare
* Intelligent Platform Management Interface (IPMI)
* LogMeIn
* Remote Desktop Services (RDP)
* Scrcpy
* Secure Shell (dont OpenSSH)
* Splashtop
* SPICE (machines virtuelles)
* System Center Configuration Manager
* Telnet
* TeamViewer
* Universal Asynchronous Receiver Transmitter (UART, transmission série, tty)
* Virtual Network Computing (VNC, TightVNC, UltraVNC)
* Waypipe (pour Wayland)
* X11 (XDMCP, tunnel SSH)

Implémentations controversées |

* Back Orifice
* DarkComet
* SubSeven

* Portail de la sécurité des systèmes d'information

*[(en)]: Langue : anglais
*[p.]: pages
*[v]: Voir ce modèle.
*[m]: Modifier ce modèle. Merci de prévisualiser avant de sauvegarder.