SOCKet-and-Secure.

Motivation

Protocole de proxy pour les environnements client/serveur.

Principes

SOCKS définit le dialogue entre :

  • un client SOCKS (un application implémentant l'API SOCKS, un navigateur par exemple)
  • un serveur SOCKS (un proxy), implémenté au niveau de la couche Application (au-dessus de la couche Transport, et donc au-dessus de TCP).

Deux versions de SOCKS sont principalement utilisées

  • SOCKS V4, qui fournit les fonctions de base de requête/réponse, mais uniquement sur TCP-IP. Avant SOCKS V4.3, le client SOCKS doit résoudre les adresses IP. A partir de SOCKS V4.3, un client SOCKS peut fournir des adresses IP non résolues au serveur SOCKS.
  • SOCKS V5, qui supporte les proxy UDP et ajoute une fonctionalité d'authentification selon diverses méthodes. Bien que ce soit souvent le cas (NEC par exemple), il n'est pas garanti que les implémentations de SOCKS V5 supportent SOCKS V4.

Java 2 n'implémente que SOCKS V4, et ne supporte donc pas (à moins de l'implémenter soi-même) les proxy UDP et l'authentification via SOCKS. Un client Java devra résoudre les adresses IP avant de les transmettre à un serveur SOCKS si ce serveur contient une version de SOCKS inférieure à SOCKS 4.3.

Tous les serveurs SOCKS ne supportent pas la traversée de plusieurs serveurs socksifiés (un serveur SOCKS doit lui-même émettre une requête SOCKS, etc.). Ce cas de figure est généralement supporté par les implémentations de serveurs SOCKS supérieures à 4.3 (rsockd). SOCKS V5 supporte toujours cette fonctionnalité.

Notes

  • Ne pas confondre un serveur SOCKS avec un proxy HTTP. Le serveur SOCKS attend des requêtes dans le protocole SOCKS et non HTTP : si l'on spécifie l'adresse d'un serveur SOCKS comme proxy HTTP (dans un navigateur, dans le JPI, etc.), on pourra observer des erreurs telles que Incompatible version number: 71, parce que 71 est le code ASCII de la lettre G, première lettre de la commande HTTP GET, ou 80 (P) pour une requête POST, etc.
  • Mettre un serveur applicatif derrière un serveur SOCKS est possible, mais implique que les clients de ce serveur applicatif (navigateurs par exemple) soient au courant de l'existence du serveur SOCKS (qu'ils contactent le serveur SOCKS sur son port et via le protocole SOCKS, et non directement le serveur applicatif).
  • Des clients ping ou traceroute ne pourront pas non plus traverser un serveur SOCKS, dans la mesure où ces utilitaires utilisent ICMP, et non pas un des protocoles sur lequels SOCKS est basé, à savoir TCP-IP et UDP.
  • SOCKS V5 est un standard de l'IETF (RFC 1928).

Exemples

Il existe diverses implémentations de SOCKS, dont :

Voir