Desarrolladores
A qué protocolo apuntar un cliente, y qué esquema, socks5 o socks5h, configurar en él una vez cambiado el proxy.
SOCKS5 es un protocolo de proxy de nivel de transporte: abre una conexión en tu nombre y mueve bytes, sin leer ni reescribir lo que hay dentro. Cada proxy ISP estático que vendemos se puede cambiar entre HTTP y SOCKS5 en el pedido que ya tienes.
Cambiar de protocolo no es cambiar de producto: cambias el proxy que ya tienes, desde el panel o la API, y el pedido se actualiza con el puerto y las credenciales nuevos con los que conectarte.
En resumen: SOCKS5 es un protocolo de proxy, no un tipo de dirección: retransmite una conexión TCP sin leer ni reescribir lo que hay dentro. Cada proxy residencial estático (ISP) que vende ProxyJam funciona con HTTP, que transporta HTTPS, o con SOCKS5, y cambias entre ellos en el pedido que ya tienes; después del cambio, conéctate con el puerto y las credenciales que muestra el pedido.
SOCKS5 transporta cualquier cosa para la que tu cliente pueda abrir una conexión TCP, incluido tráfico que un proxy HTTP no puede reenviar, y pasa los bytes sin tocarlos. Eso lo convierte en la opción natural para un cliente de base de datos, una sesión SSH o cualquier herramienta que no hable HTTP. Lo que no hace es cambiar lo que es la dirección. El protocolo de proxy se habla entre tu cliente y el proxy; el sitio del otro extremo ve una conexión desde la dirección del proxy, más las cabeceras que un proxy HTTP haya decidido añadir. Así que la pregunta que vale la pena hacerse no es qué protocolo comprar. Es a qué red pertenece la dirección, y ahí la respuesta es un proveedor de internet con nombre, 19 de ellos en Estados Unidos.
La versión 5 de SOCKS se publicó en 1996 como RFC 1928, un protocolo para atravesar cortafuegos que amplió la versión 4 de SOCKS con UDP, un marco para métodos de autenticación y destinos indicados como nombres de dominio o direcciones IPv6. Un cliente ofrece los métodos de autenticación que admite y el servidor elige uno; después el cliente pide una conexión saliente (CONNECT), un puerto de escucha (BIND) o un relé UDP (UDP ASSOCIATE). El inicio de sesión con usuario y contraseña tiene su propia especificación breve, el RFC 1929, que envía la contraseña en texto claro; por eso conviene mantener cifrado el tráfico dentro del túnel cuando importa.
La opción del nombre de dominio es lo que distingue los esquemas socks5 y socks5h. El manual de curl describe --socks5 como usar el proxy «but resolve the hostname locally» (pero resolver el nombre de host localmente), y --socks5-hostname como la variante que deja que «the proxy resolve the hostname» (el proxy resuelva el nombre de host). En una URL de proxy, socks5:// da el primer comportamiento y socks5h:// el segundo, como recoge la tabla de Everything curl. Un proxy HTTP que transporta HTTPS normalmente recibe el nombre: una petición CONNECT nombra el host y el puerto de destino, y el proxy abre el túnel hasta él (RFC 9110, sección 9.3.6). El relé UDP forma parte de la especificación de SOCKS5, pero las implementaciones difieren en él; las preguntas frecuentes de abajo explican qué significa eso en nuestros proxies.
Si ya tienes un acceso SSH a un servidor, tienes un proxy SOCKS5 sin comprar ninguno. ssh -N -D 1080 user@server configura lo que el manual de ssh de OpenBSD llama reenvío de puertos local «dynamic» (dinámico) a nivel de aplicación: ssh escucha en el puerto 1080 de tu máquina y «will act as a SOCKS server» (actuará como servidor SOCKS), transportando cada conexión por el canal SSH cifrado y abriéndola desde la máquina remota. -N lo limita al reenvío, sin shell remota. Apunta un cliente a socks5h://127.0.0.1:1080 y su tráfico sale desde el servidor.
La diferencia con un proxy SOCKS5 comprado está en por dónde sale la conexión. A través de un túnel SSH, el sitio del otro extremo ve la dirección del servidor SSH y la red a la que pertenece ese servidor, que en un servidor alquilado suele ser la de una empresa de hosting. SSH cifra el tramo entre tú y el servidor; del servidor al sitio, el tráfico es lo que ya era. Un proxy de ProxyJam cambiado a SOCKS5 sale desde una dirección en la red de un proveedor de internet con nombre, elegida por país y operador al pagar, y te conectas a él directamente con el puerto y las credenciales del pedido, sin SSH de por medio y sin ningún servidor propio que mantener.
Así que los dos responden a preguntas distintas. Un túnel sobre SSH saca el tráfico por una máquina que ya controlas. Un proxy SOCKS5 en una dirección ISP es para el trabajo en el que importa la propia dirección de salida, es decir, qué red muestra una consulta sobre ella.
Tres intercambios breves, y en ninguno de ellos el proxy necesita entender tu tráfico.
Tu cliente saluda al proxy y acuerdan la autenticación. Ofrece los métodos que admite; el proxy nombra el que quiere. En nuestras direcciones es un usuario y una contraseña, o nada en absoluto si en su lugar has puesto tu propia IP en la lista blanca.
Tu cliente pide un destino. Un host y un puerto, enviados como dirección o como nombre. Enviar el nombre es el caso interesante: lo resuelve el proxy, así que la consulta sale desde la red del proxy y no desde la tuya.
A partir de ahí el proxy solo mueve bytes. No analiza el contenido, no añade cabeceras y no sabe si transporta una página web, una sesión de base de datos o una transferencia de correo. Esa indiferencia es precisamente la razón para elegir SOCKS5 en lugar de un proxy HTTP.
| Proxy HTTP | HTTPS mediante CONNECT | SOCKS5 | |
|---|---|---|---|
| Qué puede transportar | Solo peticiones HTTP | Un túnel TCP hasta el host y el puerto indicados | Cualquier flujo TCP |
| ¿Lee el proxy el contenido? | Sí: analiza la petición | No, una vez abierto el túnel | No, en ningún momento |
| ¿Puede cambiar tus cabeceras? | Sí: las reenvía y puede añadir las suyas, como Via | No, una vez abierto el túnel | No: no tiene noción de cabecera |
| Dónde se resuelve el nombre de host | En el proxy | En el proxy: CONNECT nombra el host | Lo eliges tú, en cualquiera de los dos extremos |
| Compatibilidad habitual de los clientes | Universal en las herramientas HTTP | Universal en las herramientas HTTP | Habitual en las herramientas de línea de comandos; algunas bibliotecas necesitan un paquete adicional |
| Más adecuado para | Peticiones web simples | Navegación y scraping HTTPS corrientes | Protocolos no web y tráfico mixto |
A qué protocolo apuntar un cliente, y qué esquema, socks5 o socks5h, configurar en él una vez cambiado el proxy.
A qué protocolo apuntar un cliente, y cómo cambiar el proxy que ya tienes desde el panel o la API.
Desde el panel o con una llamada a la API sobre el pedido; cambiar solo el cliente no basta. El proxy puede quedar brevemente no disponible mientras cambia.
No reutilices los valores con los que te conectabas por HTTP.
socks5h://USERNAME:PASSWORD@HOST:PORT para que el proxy resuelva los nombres de host, o socks5:// para resolverlos en tu lado.
curl -x socks5h://USERNAME:PASSWORD@HOST:PORT https://example.com/.
En Python, requests necesita su extra SOCKS, pip install requests[socks], antes de que funcione una URL de proxy socks5h://.
import requests
# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
proxy = "http://USERNAME:PASSWORD@HOST:PORT"
proxies = {
"http": proxy,
"https": proxy,
}
response = requests.get(
"https://example.com/",
proxies=proxies,
)
print(response.status_code)
# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
curl -x http://USERNAME:PASSWORD@HOST:PORT \
https://example.com/
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
// HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
const proxy = "http://USERNAME:PASSWORD@HOST:PORT";
const agent = new HttpsProxyAgent(proxy);
const response = await axios.get(
"https://example.com/",
{
httpAgent: agent,
httpsAgent: agent,
},
);
console.log(response.status);
package main
import (
"fmt"
"net/http"
"net/url"
)
func main() {
// HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
proxy, _ := url.Parse(
"http://USERNAME:PASSWORD@HOST:PORT")
client := &http.Client{Transport: &http.Transport{
Proxy: http.ProxyURL(proxy),
}}
res, _ := client.Get("https://example.com/")
fmt.Println(res.Status)
}
Los ejemplos de abajo se conectan por HTTP, el protocolo con el que empieza un pedido. Para usar SOCKS5, cambia primero el propio proxy, desde el panel o con una llamada a la API; el pedido muestra entonces el puerto y las credenciales que debes usar a partir de ese momento. En el cliente, cambia el esquema a socks5, o a socks5h si quieres que el proxy resuelva el nombre de host, con ese puerto y esas credenciales. Para eso Python necesita requests[socks], y Node.js un agente SOCKS en lugar del agente HTTPS.
Las respuestas de abajo indican las condiciones con las que vendemos, y cada una que lo hace enlaza al documento que nos obliga a cumplirlas.
SOCKS5 es un protocolo de proxy definido en el RFC 1928 que funciona en la capa de transporte. Tu cliente pide al proxy que abra una conexión con un host y un puerto, el proxy la abre y, a partir de ahí, reenvía bytes en ambas direcciones sin interpretarlos. Como nunca analiza lo que transporta, no se limita al tráfico web: cualquier cosa que funcione sobre TCP puede pasar por él.
Un proxy HTTP entiende HTTP. Lee la línea de petición y las cabeceras, y puede añadirlas, quitarlas o reescribirlas, y por eso algunos proxies se anuncian discretamente en una cabecera que tú no pusiste. SOCKS5 no tiene ninguna noción de cabecera: ve un destino y un flujo de bytes. Si tu tráfico no es HTTP, o prefieres que nada en medio pueda editarlo, SOCKS5 es el que debes elegir.
No, y un proxy HTTP tampoco. SOCKS5 te autentica ante el proxy y después reenvía bytes. La especificación permite que un método de autenticación añada su propia protección, pero la autenticación con usuario y contraseña (RFC 1929) envía la contraseña en texto claro y no protege nada después. Si el tráfico de dentro es HTTPS o SSH, ya está cifrado de extremo a extremo, y el proxy no puede leerlo. Si el tráfico de dentro es texto plano, sigue siendo texto plano, así que no trates SOCKS5 como una capa de cifrado.
Traslada la consulta DNS. Con socks5, tu cliente resuelve el nombre de host localmente y pide al proxy que se conecte a la dirección resultante. Con socks5h, tu cliente envía el nombre y el proxy lo resuelve. Eso importa por dos motivos: tu propio resolvedor nunca ve qué hosts visitas, y obtienes la respuesta que obtiene la red del proxy, que para un nombre de host que varía según la geografía a menudo no es la que obtendrías en casa.
UDP ASSOCIATE está en el RFC 1928; que un cliente o un servidor concreto lo implemente varía, así que compruébalo en los dos extremos en lugar de darlo por hecho. No hemos publicado compatibilidad con UDP para nuestros proxies, así que cuenta con TCP, y pregunta a soporte antes de construir algo que dependa de UDP.
No. Cambias el proxy que ya tienes entre HTTP, que también transporta HTTPS, y SOCKS5, desde el panel o con una llamada a la API sobre el mismo pedido. No es solo un ajuste del cliente: el cambio se hace en el proxy, el pedido se actualiza con el nuevo protocolo, puerto y credenciales, y el proxy puede quedar brevemente no disponible mientras ocurre. El proxy sigue siendo tuyo durante todo el periodo que pagaste, se sustituye gratis si deja de responder o está bloqueado en un objetivo que indicaste, hasta el 20 % del pedido por mes natural, y el primer pedido incluye un reembolso de 24 horas para un máximo de 10 IP que las pruebas no anulan. Términos de Servicio
--socks5 resuelve el nombre de host localmente, --socks5-hostname deja que lo resuelva el proxysocks5:// y socks5h:// en una URL de proxy, y qué extremo resuelve el nombre de host-D configura el reenvío dinámico de puertos local, con ssh actuando como servidor SOCKS4 y SOCKS5, y -N reenvía puertos sin ejecutar un comando remoto