Proxy pour tous les internautes qui veulent configurer et utiliser un proxy.
Les serveurs proxy SOCKS prennent en charge les trafics internet de type POP3 et SMTP pour les e-mails, chat IRC, FTP pour le téléchargement de fichiers vers des sites Web et des fichiers torrent. Ils sont plus lents que le HTTP et ils ne sont pas sûrs car le chiffrement des données n’est pas optimal. L'actuelle version 5 du protocole SOCKS, 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. D'après le modèle OSI, le protocole proxy SOCKS est une couche intermédiaire entre la couche applicative et la couche transport.
le proxy 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 :
Le client se connecte et envoie une annonce qui inclut une liste de méthodes d'authentification qu'il supporte.
Le serveur choisit l'une de ces méthodes ou envoie une erreur si aucune méthode n'est acceptable.
Plusieurs messages sont alors échangés selon la méthode d'authentification choisie.
Une fois authentifié le client envoie une requête de connexion similaire mais différente du protocole SOCKS v4.
Le serveur répond d'une manière similaire à SOCKS v4.
Les méthodes d'authentification supportées sont numérotées comme suit :
0x00 - Pas d'authentification
0x01 - GSSAPI
0x02 - Nom d'utilisateur/Mot de passe
0x03-0x7F - méthodes définies par l'IANA
0x80-0xFE - méthodes réservée pour des utilisations privées.
La requête initiale du client vers le serveur est :
champ 1 : numéro de version de SOCKS (0x05 pour cette version), sur un octet
champ 2 : nombre de méthodes d'authentification supportées, sur un octet
champ 3 : liste des méthodes d'authentification supportées (un octet par méthode), de taille variable
Le serveur communique alors son choix :
champ 1 : numéro de version de SOCKS (0x05 pour cette version), sur un octet
champ 2 : méthode d'authentification choisie, sur un octet, ou 0xFF si aucune des méthodes proposées n'est convenable
La suite de l'authentification dépend de la méthode choisie.
Après l'authentification, le client envoie sa demande de connexion :
champ 1 : numéro de version de SOCKS (devrait être 0x05 pour cette version), sur un octet
champ 2 : code de commande sur un octet :
0x01 = établir une connexion TCP/IP
0x02 = mettre en place une correspondance de port TCP
0x03 = associer un port UDP
champ 3 : réservé, doit être 0x00
champ 4 : type de l'adresse de destination, sur un octet :
0x01 = adresse IPv4 (le champ adresse sera de longueur 4 octets)
0x03 = nom de domaine (le champ adresse sera de longueur variable)
0x04 = adresse IPv6 (le champ adresse sera de longueur 16 octets)
champ 5 : adresse de destination, de longueur 4 ou 16 octets, ou de la longueur du nom de domaine + 1.
Si le type d'adresse est 0x03 alors l'adresse est constituée d'un octet indiquant la longueur du nom de domaine suivi du nom lui-même
champ 6 : numéro de port, sur 2 octets
Le serveur transmet sa réponse :
champ 1 : numéro de version de SOCKS (devrait être 0x05 pour cette version), sur un octet
champ 2 : statut, sur un octet :
0x00 = requête acceptée
0x01 = échec
0x02 = connexion interdite
0x03 = réseau injoignable
0x04 = hôte de destination injoignable
0x05 = connexion refusée par l'hôte de destination
0x06 = TTL expiré
0x07 = commande non-supportée/erreur de protocole
0x08 = type d'adresse non-supporté
champ 3 : réservé, doit être 0x00
champ 4 : type de l'adresse d'association sur socks proxy, sur un octet :
0x01 = adresse IPv4 (le champ adresse sera de longueur 4 octets)
0x03 = nom de domaine (le champ adresse sera de longueur variable)
0x04 = adresse IPv6 (le champ adresse sera de longueur 16 octets)
champ 5 : adresse d'association sur socks proxy, de longueur 4 ou 16 octets, ou de la longueur du nom de domaine + 1.
Si le type d'adresse est 0x03 alors l'adresse est constituée d'un octet indiquant la longueur du nom de domaine suivi du nom lui-même
champ 6 : numéro de port d'association sur socks proxy, sur deux octets