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-IP).
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 :
- des extensions de WinSock
- des pîles TCP-IP socksifiées
Voir