Разработчики
На какой протокол направить клиент и какую схему, socks5 или socks5h, указать в нём после переключения прокси.
SOCKS5 работает как прокси-протокол транспортного уровня: он открывает соединение от вашего имени и передаёт байты, не читая и не переписывая то, что внутри. Каждый статический ISP-прокси, который мы продаём, можно переключить между HTTP и SOCKS5 в заказе, который у вас уже есть.
Переключение протокола не делает прокси другим продуктом: вы переключаете прокси, который у вас уже есть, в панели управления или через API, и заказ обновляется новым портом и учётными данными для подключения.
Коротко: SOCKS5 относится к прокси-протоколам, а не к видам адресов: он ретранслирует TCP-соединение, не читая и не переписывая то, что внутри. Каждый статический резидентный (ISP) прокси, который продаёт ProxyJam, работает по HTTP, который переносит HTTPS, или по SOCKS5, и вы переключаетесь между ними в заказе, который у вас уже есть; после переключения подключайтесь с портом и учётными данными, которые показывает заказ.
SOCKS5 переносит всё, для чего ваш клиент может открыть TCP-соединение, включая трафик, который HTTP-прокси переслать не может, и передаёт байты нетронутыми. Поэтому он становится естественным выбором для клиента базы данных, SSH-сессии или любого инструмента, который не говорит на HTTP. Одного он не делает: не меняет того, чем является адрес. На прокси-протоколе говорят ваш клиент и прокси; сайт на дальнем конце видит соединение с адреса прокси плюс любые заголовки, которые решил добавить HTTP-прокси. Поэтому стоит спрашивать не о том, какой протокол купить, а о том, какой сети принадлежит адрес, и здесь ответ такой: названному интернет-провайдеру, а в США их 19.
SOCKS версии 5 был опубликован в 1996 году как RFC 1928, протокол для прохождения через файрволы, который расширил SOCKS версии 4 поддержкой UDP, рамками для методов аутентификации и адресами назначения в виде доменных имён или адресов IPv6. Клиент предлагает методы аутентификации, которые поддерживает, и сервер выбирает один; затем клиент запрашивает исходящее соединение (CONNECT), слушающий порт (BIND) или ретрансляцию UDP (UDP ASSOCIATE). Вход по логину и паролю описан в собственной короткой спецификации, RFC 1929, которая отправляет пароль открытым текстом, поэтому там, где это важно, держите трафик внутри туннеля зашифрованным.
Именно в том, передаётся ли доменное имя, и различаются схемы socks5 и socks5h. Руководство curl описывает --socks5 как использование прокси, но «resolve the hostname locally» (с локальным резолвингом имени хоста), а --socks5-hostname как вариант, при котором «the proxy resolve the hostname» (имя хоста резолвит прокси). В прокси-URL socks5:// даёт первое поведение, а socks5h:// второе, как показывает таблица в Everything curl. HTTP-прокси, переносящий HTTPS, обычно получает имя: запрос CONNECT называет хост и порт назначения, и прокси открывает туннель к ним (RFC 9110, раздел 9.3.6). Ретрансляция UDP входит в спецификацию SOCKS5, но реализации в ней расходятся; что это значит для наших прокси, сказано в FAQ ниже.
Если у вас уже есть SSH-доступ к серверу, у вас есть SOCKS5-прокси без всякой покупки. ssh -N -D 1080 user@server настраивает то, что руководство OpenBSD по ssh называет локальной «dynamic» (динамической) переадресацией портов на уровне приложений. Команда ssh слушает порт 1080 на вашей машине и «will act as a SOCKS server» (работает как SOCKS-сервер), перенося каждое соединение по зашифрованному SSH-каналу и открывая его с удалённой машины. -N ограничивает его переадресацией, без удалённой оболочки. Направьте клиент на socks5h://127.0.0.1:1080, и его трафик будет уходить с сервера.
Отличие от купленного SOCKS5-прокси в том, где соединение выходит наружу. Через SSH-туннель сайт на дальнем конце видит адрес SSH-сервера и сеть, которой этот сервер принадлежит, а у арендованного сервера это обычно сеть хостинг-компании. SSH шифрует участок между вами и сервером; от сервера до сайта трафик остаётся таким, каким он уже был. Прокси ProxyJam, переключённый на SOCKS5, выходит с адреса в сети названного интернет-провайдера, выбранного по стране и оператору при оформлении заказа. Подключаетесь вы к нему напрямую, с портом и учётными данными из заказа, без SSH посередине и без собственного сервера, который нужно поддерживать.
Поэтому они отвечают на разные вопросы. Туннель через SSH выпускает трафик с машины, которую вы уже контролируете. SOCKS5-прокси на ISP-адресе нужен для работы, где важен сам выходной адрес, то есть то, какую сеть показывает его проверка.
Три коротких обмена, и ни в одном из них прокси не нужно понимать ваш трафик.
Ваш клиент приветствует прокси и договаривается об аутентификации. Он предлагает методы, которые поддерживает; прокси называет тот, который ему нужен. На наших адресах это логин и пароль или вообще ничего, если вместо этого вы внесли свой IP в белый список.
Ваш клиент запрашивает адрес назначения. Хост и порт, переданные либо как адрес, либо как имя. Передача имени и есть интересный случай: прокси сам его резолвит, поэтому DNS-запрос уходит из сети прокси, а не из вашей.
Дальше прокси просто передаёт байты. Он не разбирает полезную нагрузку, не добавляет заголовков и не знает, что несёт: веб-страницу, сессию базы данных или передачу почты. Ради этого безразличия SOCKS5 и выбирают вместо HTTP-прокси.
| HTTP-прокси | HTTPS через CONNECT | SOCKS5 | |
|---|---|---|---|
| Что может переносить | Только HTTP-запросы | TCP-туннель к названным хосту и порту | Любой TCP-поток |
| Читает ли прокси полезную нагрузку | Да, он разбирает запрос | Нет, после открытия туннеля | Нет, ни на каком этапе |
| Может ли он изменить ваши заголовки | Да, он их пересылает и может добавить свои, например Via | Нет, после открытия туннеля | Нет, у него нет понятия заголовка |
| Где резолвится имя хоста | На прокси | На прокси, потому что CONNECT называет хост | На ваш выбор, на любой из сторон |
| Типичная поддержка в клиентах | Повсеместная в HTTP-инструментах | Повсеместная в HTTP-инструментах | Распространена в инструментах командной строки; некоторым библиотекам нужен дополнительный пакет |
| Лучше всего подходит для | Простых веб-запросов | Обычного просмотра и скрейпинга по HTTPS | Протоколов помимо веба и смешанного трафика |
На какой протокол направить клиент и какую схему, socks5 или socks5h, указать в нём после переключения прокси.
На какой протокол направить клиент и как переключить уже имеющийся прокси в панели управления или через API.
В панели управления или одним вызовом API для заказа; изменить только клиент недостаточно. Во время переключения прокси может быть ненадолго недоступен.
Не используйте повторно значения, с которыми вы подключались по HTTP.
socks5h://USERNAME:PASSWORD@HOST:PORT, чтобы имена хостов резолвил прокси, или socks5://, чтобы резолвить их на своей стороне.
curl -x socks5h://USERNAME:PASSWORD@HOST:PORT https://example.com/.
В Python библиотеке requests нужно её SOCKS-дополнение, pip install requests[socks], прежде чем заработает прокси-URL вида 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)
}
Примеры ниже подключаются по HTTP, протоколу, с которого начинается заказ. Чтобы использовать SOCKS5, сначала переключите сам прокси в панели управления или одним вызовом API; после этого заказ показывает порт и учётные данные, которыми нужно пользоваться дальше. В клиенте смените схему на socks5 или на socks5h, если хотите, чтобы имя хоста резолвил прокси, с этим портом и этими учётными данными; для этого в Python нужен requests[socks], а в Node.js SOCKS-агент вместо HTTPS-агента.
Ответы ниже называют условия, на которых мы продаём, и каждый ответ, где они названы, ссылается на документ, который нас ими обязывает.
Протокол SOCKS5 определён в RFC 1928 и работает на транспортном уровне. Ваш клиент просит прокси открыть соединение с хостом и портом, прокси его открывает и с этого момента пересылает байты в обе стороны, не интерпретируя их. Поскольку он никогда не разбирает то, что несёт, он не ограничен веб-трафиком: через него может пройти всё, что работает поверх TCP.
HTTP-прокси понимает HTTP. Он читает строку запроса и заголовки и волен добавлять, удалять или переписывать их, поэтому некоторые прокси незаметно сообщают о себе в заголовке, которого вы не задавали. У SOCKS5 вообще нет понятия заголовка: он видит адрес назначения и поток байтов. Если ваш трафик не HTTP или вы хотите, чтобы ничто посередине не могло его править, выбирайте SOCKS5.
Нет, как и HTTP-прокси. SOCKS5 аутентифицирует вас на прокси и затем пересылает байты. Спецификация позволяет методу аутентификации добавить собственную защиту, но аутентификация по логину и паролю (RFC 1929) отправляет пароль открытым текстом и ничего после него не защищает. Если внутри идёт HTTPS или SSH, трафик уже зашифрован из конца в конец, и прокси не может его прочитать. Если трафик внутри открытый, он остаётся открытым, поэтому не считайте SOCKS5 слоем шифрования.
Он переносит DNS-запрос. С socks5 ваш клиент резолвит имя хоста локально и просит прокси подключиться к полученному адресу. С socks5h ваш клиент отправляет имя, и его резолвит прокси. Это важно в двух отношениях: ваш собственный резолвер никогда не видит, какие хосты вы посещаете, и вы получаете тот ответ, который получает сеть прокси, а для хоста, ответ которого зависит от географии, он часто отличается от ответа, который вы получили бы дома.
UDP ASSOCIATE есть в RFC 1928, но одни клиенты и серверы его реализуют, а другие нет, поэтому проверяйте обе стороны, а не предполагайте. Мы не публиковали поддержку UDP для наших прокси, поэтому рассчитывайте на TCP и спросите поддержку, прежде чем строить что-либо, что зависит от UDP.
Нет. Вы переключаете уже имеющийся прокси между HTTP, который также переносит HTTPS, и SOCKS5 в панели управления или одним вызовом API для того же заказа. Это не только настройка клиента: переключение выполняется на прокси, заказ обновляется новым протоколом, портом и учётными данными, а пока это происходит, прокси может быть ненадолго недоступен. Прокси остаётся вашим весь оплаченный период, его бесплатно заменяют, если он перестаёт отвечать или заблокирован на названной вами цели, до 20 % заказа за календарный месяц, а на первый заказ действует возврат в течение 24 часов, который покрывает до 10 IP и не отменяется проверкой. Условия обслуживания
--socks5 резолвит имя хоста локально, --socks5-hostname позволяет резолвить его проксиsocks5:// и socks5h:// в прокси-URL и то, какая сторона резолвит имя хоста-D настраивает локальную динамическую переадресацию портов, при которой ssh работает как сервер SOCKS4 и SOCKS5, а -N переадресует порты без выполнения удалённой команды