Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

SOCKS est un protocole réseau qui permet à des applications client-serveur d'employer les services d'un pare-feu. SOCKS est l'abréviation du terme anglophone « sockets ».

Les applications du réseau protégées derrière le pare-feu qui souhaitent accéder à des serveurs extérieurs doivent se connecter via un serveur proxy utilisant le protocole SOCKS. Un tel serveur décide de l'éligibilité du client à accéder au serveur externe et transmet sa requête au serveur. Le protocole peut également être employé de manière inverse, permettant aux applications à l'extérieur de se connecter aux serveurs derrière le pare-feu.

Histoire

Cette section ne cite pas suffisamment ses sources (mars 2023). Pour l'améliorer, ajoutez des références de qualité et vérifiables (comment faire ?) ou le modèle ((Référence nécessaire)) sur les passages nécessitant une source.

Le protocole a été à l'origine développé par David Koblas, un des administrateurs système de la société MIPS. L'année du rachat de MIPS par Silicon Graphics, en 1992, Koblas a présenté un papier sur SOCKS à un colloque sur la sécurité Usenix, et SOCKS est devenu de fait un protocole public. Le protocole a été amélioré dans sa version 4 par Ying-Da Lee de la société NEC.

La version 4a, « officieuse », ajoute le support des serveurs de résolution de noms à SOCKS.

L'actuelle version 5 du protocole, spécifiée dans la RFC 1928, étend la version précédente en ajoutant la possibilité de transmettre de l'UDP, permet l'authentification, la résolution des noms de domaines par le serveur SOCKS lui-même, et IPv6.

L'architecture et l'application cliente de référence sont la propriété de Permeo Technologies.

Classification

D'après le modèle OSI, le protocole SOCKS est une couche intermédiaire entre la couche applicative et la couche transport[réf. souhaitée].

Serveurs SOCKS

La mise en forme de cette section ne suit pas les recommandations de Wikipédia (mars 2023) : découvrez comment la « wikifier ».

Liste de logiciels serveur SOCKS:

clients SOCKS

Il existe des programmes permettant de socksifier[2] d'autres applications, ce qui permet à n'importe quel logiciel possédant des capacités réseau d'utiliser SOCKS, même s'il n'est pas prévu pour supporter SOCKS.

Liste de clients SOCKS

Client Licence Version Date de création Plateforme Version de protocole
ProxyCap Shareware 5.26 03/2007 Windows, Mac OS X v4, v5, HTTPS, SSH tunnel, HTTP
socat GPL 1.6 03/2007 POSIX multi-optional tunnel
WideCap Shareware 1.4 12/2007 Windows v4, v5, HTTPS
Proxifier Shareware 3.21 02/2007 Windows, Mac OS X v4, v5, HTTPS, HTTP
HTTP-Tunnel Client Freeware 4.4.400 01/2007 Windows v4, v5, HTTP
dsocks GPL 1.6 10/2006 *BSD, Mac OS X v4, v5
connect GPL 1.95 08/2006 Windows, POSIX v4, v5, HTTPS
nylon 3-clause BSD 1.2.1 07/2006 OpenBSD v4, v5
proxychains GPL 3.1 05/2006 POSIX (source) v4, v5, HTTPS
FreeCap GPL 3.18 02/2006 Windows v4, v5, HTTPS
Dante client BSD/Carnegie Mellon University 1.1.19 01/2006 POSIX v4, v5, HTTP
TunnelIt Shareware 1.4 06/2005 Windows SSH tunnel
GNet Library GPL 2.0.7 02/2005 POSIX (source) v4, v5
Hummingbird SOCKS Freeware 8.0 10/2003 Windows v4, v5
tsocks GPL 1.8 10/2002 POSIX (source) v4, v5
Kernel Socks Bouncer GPL 0.0.4 1/2005 POSIX (source) v5

SOCKS v4

Une connexion SOCKS normale consiste à échanger les trames TCP suivantes :

Du client vers le serveurs SOCKS

Puis du serveur vers le client

Exemple :

Voici la requête SOCKS qui permet de connecter un client Fred à l'adresse 66.102.7.99:80, dans cet exemple le serveur répond par un "OK" :

À partir de ce point toutes les données, envoyées dans ce flux TCP seront transférées sur le port 80 à l'adresse 66.102.7.99

La valeur 0x02 ("bind") pour le deuxième champ de la requête permet l'ouverture de connexions entrantes pour les protocoles tels que le FTP en mode actif.

SOCKS v4a

SOCKS 4a est une simple extension au protocole SOCKS 4 qui permet à un client qui ne peut pas résoudre le nom de domaine de l'hôte de destination de l'indiquer dans sa requête.

Le client doit mettre les trois premiers octets de l'adresse IP de destination à NULL et le dernier octet à une valeur différente de NULL (cela correspond à une adresse IP du type 0.0.0.x, avec x une valeur différente de 0, ce qui n'est pas une adresse valide et qui n'aurait donc jamais pu être utilisée si le client avait pu résoudre le nom de domaine). Le client doit ensuite envoyer le nom de domaine de destination après l'octet NULL qui termine le nom d'utilisateur et le terminer par un autre octet NULL. Cela est utilisé de la même manière pour les requêtes "connect" et "bind".

Une connexion SOCKS avec demande de résolution de nom de domaine se présente comme suit :

Du client vers le serveur

Puis du serveur vers le client

Un serveur supportant le protocole 4a doit examiner l'adresse IP de destination dans la requête. S'il s'agit d'une adresse 0.0.0.x avec x non nul, le serveur doit lire le nom de domaine indiqué par le client dans le paquet. Il doit ensuite résoudre lui-même le nom de domaine et établir la connexion si possible.

SOCKS v5

SOCKS v5 est une extension de SOCKS v4 qui offre davantage de possibilités d'authentification ainsi que le support de l'UDP. La poignée de main initiale consiste en la procédure suivante :

Les méthodes d'authentification supportées sont numérotées comme suit :

La requête initiale du client vers le serveur est :

Le serveur communique alors son choix :

La suite de l'authentification dépend de la méthode choisie.

Après l'authentification, le client envoie sa demande de connexion :

Le serveur transmet sa réponse :

Notes et références

  1. ftp://ftp.delegate.org/pub/DeleGate/COPYRIGHT
  2. (en) Roedy Green, (250) 361-9093 of Canadian Mind Products. For email see contact page., « SOCKSIFY : Java Glossary », sur mindprod.com (consulté le ).