# SOCKS

SOCKS es un protocolo de Internet que permite a las aplicaciones Cliente-servidor usar de manera transparente los servicios de un firewall de red. SOCKS es una abreviación de "SOCKetS".
Los clientes que hay detrás de un firewall que necesitan acceder a los servidores del exterior, pueden conectarse en su lugar a un servidor proxy SOCKS. Tal servidor proxy controla qué cliente puede acceder al servidor externo y pasa la petición al servidor. SOCKS puede ser usado también de la forma contraria, permitiendo a los clientes de fuera del firewall ("clientes exteriores") conectarse a los servidores de dentro del firewall (servidores internos).
El protocolo fue desarrollado originalmente por David Koblas, un administrador de MIPS Computer Systems. Después de que MIPS fuera controlado por Silicon Graphics en 1992, Koblas presentó un artículo sobre SOCKS en el Simposio anual de seguridad Usenix y SOCKS llegó a estar disponible públicamente. El protocolo fue extendido a la versión 4 por Ying-Da Lee de NEC.
Las extensiones no oficiales SOCKS 4a añaden soporte para nombres DNS para resolver nombres con el servidor SOCKS. La versión actual 5 del protocolo, RFC 1928 o authenticated firewall traversal, extiende la versión previa soportando UDP, autenticación, permitiendo al servidor SOCKS resolver nombres de host para el cliente SOCKS, e IPv6.
De acuerdo con el modelo OSI esto es una capa intermedia entre la capa de aplicación y la capa de transporte.

## Protocolo SOCKS4

Una petición de conexión típica SOCKS 4 se parece a algo similar a esto (cada número es un byte):
Cliente al Servidor Socks:
Servidor al cliente de socks:
Ejemplo:
Esta es una petición socks 4 para conectar a Fred al 66.102.7.99:80, el servidor contesta con un "OK."
Desde este punto cualquiera de los datos enviados desde el cliente socks al servidor socks será retransmitido a 66.102.7.99 y viceversa.
El campo comando puede ser 0x01 para "conectar" o 0x02 para "asociar"(bind). "Asociar" permite conexiones entrantes para protocolos como FTP activo.

### Protocolo SOCKS 4a

SOCKS 4a es una extensión simple al protocolo SOCKS 4 que permite a un cliente que no puede resolver el nombre de dominio de un host destino especificarlo.
El cliente debe asignar los primeros tres bytes de DSTIP a NULL y el último byte a un valor distinto de cero (Esto corresponde a una dirección IP 0.0.0.x, siendo x distinto de cero, una dirección destino inadmisible y así no debe ocurrir nunca si el cliente puede resolver el nombre del dominio). Siguiendo al byte NULL que termina USERID, el cliente debe enviar el nombre de dominio destino y lo termina con otro byte NULL. Esto se usa para ambas peticiones CONNECT y BIND.
Cliente al Servidor Socks:
Servidor a cliente de socks:
Un servidor que usa el protocolo 4A debe comprobar el DSTIP en el paquete de petición. Si esto representa la dirección 0.0.0.x siendo x distinto de cero, el servidor debe leer en el nombre de dominio que el cliente envía en el paquete de datos. El servidor debe resolver el nombre de dominio y realizar la conexión al host destino si puede.

## Protocolo SOCKS 5

Una extensión del protocolo SOCKS 4 que ofrece más opciones de autenticación. La negociación (handshake) inicial ahora consiste en lo siguiente:
Los métodos de autenticación soportados son numerados como sigue:
El saludo inicial desde el cliente es:
La elección del servidor es comunicada:
La autenticación subsiguiente es dependiente del método.
La petición de conexión del cliente es:-
Respuesta del Servidor:-

## Servidores SOCKS

Lista de programas servidores SOCKS:
* Dante Socks Server
* FreeProxy Incluye un servidor SOCKS. Se ejecuta sobre Windows 98, NT, 2000, XP y Server 2003
* AnalogX Proxy Incluye un servidor SOCKS. Se ejecuta sobre Windows 98, NT, 2000, XP y Server 2003
* Java Socks Server
* Socks4 Server
* SS5 Socks Server
* WinGate
* SSH (OpenSSH sobre Unix/Linux, PuTTY sobre Windows) (using dynamic port forwarding)
* DeleGate
* Antinat

## Clientes SOCKS

Son los programas cliente, los cuales permiten la adaptación de cualquier software para conectarse con redes externas mediante SOCKS.
Lista de clientes SOCKS:
* Dante client
* FreeCap Archivado el 30 de octubre de 2005 en Wayback Machine.
* Proxifier
* Hummingbird socks
* ProxyCap
* SocksCap
* tsocks
* socat
* connect
* GNet Library
* proxychains