Сменить язык
Русский English Deutsch Español Français Italiano Українська Tiếng Việt Türkçe Bahasa Indonesia हिन्दी 日本語 中文
Меню
Цены
Прокси
ТИПЫ ПРОКСИ
ПО ЛОКАЦИЯМ77 локации
Решения
Ресурсы

SOCKS5-прокси

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 ниже.

SOCKS5 через SSH

Если у вас уже есть 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-адресе нужен для работы, где важен сам выходной адрес, то есть то, какую сеть показывает его проверка.

Что происходит между вашим клиентом и нашим прокси

Три коротких обмена, и ни в одном из них прокси не нужно понимать ваш трафик.

Шаг 01

Ваш клиент приветствует прокси и договаривается об аутентификации. Он предлагает методы, которые поддерживает; прокси называет тот, который ему нужен. На наших адресах это логин и пароль или вообще ничего, если вместо этого вы внесли свой IP в белый список.

Шаг 02

Ваш клиент запрашивает адрес назначения. Хост и порт, переданные либо как адрес, либо как имя. Передача имени и есть интересный случай: прокси сам его резолвит, поэтому DNS-запрос уходит из сети прокси, а не из вашей.

Шаг 03

Дальше прокси просто передаёт байты. Он не разбирает полезную нагрузку, не добавляет заголовков и не знает, что несёт: веб-страницу, сессию базы данных или передачу почты. Ради этого безразличия SOCKS5 и выбирают вместо HTTP-прокси.

Начать

SOCKS5 и HTTP-прокси: что каждый переносит и что видит прокси

Прокси ProxyJam работает по HTTP, который переносит HTTPS через CONNECT, или по SOCKS5, протокол переключается в заказе. Выбор зависит от того, что должен отправлять ваш клиент.
HTTP-проксиHTTPS через CONNECTSOCKS5
Что может переноситьТолько HTTP-запросыTCP-туннель к названным хосту и портуЛюбой TCP-поток
Читает ли прокси полезную нагрузкуДа, он разбирает запросНет, после открытия туннеляНет, ни на каком этапе
Может ли он изменить ваши заголовкиДа, он их пересылает и может добавить свои, например ViaНет, после открытия туннеляНет, у него нет понятия заголовка
Где резолвится имя хостаНа проксиНа прокси, потому что CONNECT называет хостНа ваш выбор, на любой из сторон
Типичная поддержка в клиентахПовсеместная в HTTP-инструментахПовсеместная в HTTP-инструментахРаспространена в инструментах командной строки; некоторым библиотекам нужен дополнительный пакет
Лучше всего подходит дляПростых веб-запросовОбычного просмотра и скрейпинга по HTTPSПротоколов помимо веба и смешанного трафика

Для тех, кто решает, на какой протокол направить клиент

Разработчики

На какой протокол направить клиент и какую схему, socks5 или socks5h, указать в нём после переключения прокси.

Операторы

На какой протокол направить клиент и как переключить уже имеющийся прокси в панели управления или через API.

Перевод прокси ProxyJam на SOCKS5

  1. Переключите сам прокси

    В панели управления или одним вызовом API для заказа; изменить только клиент недостаточно. Во время переключения прокси может быть ненадолго недоступен.

  2. Скопируйте порт, логин и пароль, которые заказ показывает после переключения

    Не используйте повторно значения, с которыми вы подключались по HTTP.

  3. Укажите схему в клиенте

    socks5h://USERNAME:PASSWORD@HOST:PORT, чтобы имена хостов резолвил прокси, или socks5://, чтобы резолвить их на своей стороне.

  4. Проверьте из терминала, прежде чем трогать код

    curl -x socks5h://USERNAME:PASSWORD@HOST:PORT https://example.com/.

  5. Установите SOCKS-дополнение в Python

    В Python библиотеке requests нужно её SOCKS-дополнение, pip install requests[socks], прежде чем заработает прокси-URL вида socks5h://.

Что SOCKS5 даёт на наших адресах

Протокол
SOCKS5 или HTTP (который переносит HTTPS), переключается в заказе
Аутентификация
Логин и пароль или белый список IP
Адрес, который видит цель
Статический ISP-адрес в сети названного оператора
Выбор оператора
Названных операторов в США: 19; в других странах список короче
Охват
77 стран в каталоге, у каждой назван оператор
Ротация
Нет: адрес не меняется в течение периода
Одновременные сессии
100 на прокси, 10 после 50 ГБ в месяц
Учёт трафика
За IP за период; передача данных не учитывается ни на одном протоколе
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

Ответы ниже называют условия, на которых мы продаём, и каждый ответ, где они названы, ссылается на документ, который нас ими обязывает.

Что такое SOCKS5-прокси?

Протокол SOCKS5 определён в RFC 1928 и работает на транспортном уровне. Ваш клиент просит прокси открыть соединение с хостом и портом, прокси его открывает и с этого момента пересылает байты в обе стороны, не интерпретируя их. Поскольку он никогда не разбирает то, что несёт, он не ограничен веб-трафиком: через него может пройти всё, что работает поверх TCP.

Чем он отличается от HTTP-прокси?

HTTP-прокси понимает HTTP. Он читает строку запроса и заголовки и волен добавлять, удалять или переписывать их, поэтому некоторые прокси незаметно сообщают о себе в заголовке, которого вы не задавали. У SOCKS5 вообще нет понятия заголовка: он видит адрес назначения и поток байтов. Если ваш трафик не HTTP или вы хотите, чтобы ничто посередине не могло его править, выбирайте SOCKS5.

Шифрует ли SOCKS5 мой трафик?

Нет, как и HTTP-прокси. SOCKS5 аутентифицирует вас на прокси и затем пересылает байты. Спецификация позволяет методу аутентификации добавить собственную защиту, но аутентификация по логину и паролю (RFC 1929) отправляет пароль открытым текстом и ничего после него не защищает. Если внутри идёт HTTPS или SSH, трафик уже зашифрован из конца в конец, и прокси не может его прочитать. Если трафик внутри открытый, он остаётся открытым, поэтому не считайте SOCKS5 слоем шифрования.

Что делает socks5h такого, чего не делает socks5?

Он переносит DNS-запрос. С socks5 ваш клиент резолвит имя хоста локально и просит прокси подключиться к полученному адресу. С socks5h ваш клиент отправляет имя, и его резолвит прокси. Это важно в двух отношениях: ваш собственный резолвер никогда не видит, какие хосты вы посещаете, и вы получаете тот ответ, который получает сеть прокси, а для хоста, ответ которого зависит от географии, он часто отличается от ответа, который вы получили бы дома.

Поддерживает ли он UDP?

UDP ASSOCIATE есть в RFC 1928, но одни клиенты и серверы его реализуют, а другие нет, поэтому проверяйте обе стороны, а не предполагайте. Мы не публиковали поддержку UDP для наших прокси, поэтому рассчитывайте на TCP и спросите поддержку, прежде чем строить что-либо, что зависит от UDP.

Нужен ли другой прокси, чтобы пользоваться SOCKS5?

Нет. Вы переключаете уже имеющийся прокси между HTTP, который также переносит HTTPS, и SOCKS5 в панели управления или одним вызовом API для того же заказа. Это не только настройка клиента: переключение выполняется на прокси, заказ обновляется новым протоколом, портом и учётными данными, а пока это происходит, прокси может быть ненадолго недоступен. Прокси остаётся вашим весь оплаченный период, его бесплатно заменяют, если он перестаёт отвечать или заблокирован на названной вами цели, до 20 % заказа за календарный месяц, а на первый заказ действует возврат в течение 24 часов, который покрывает до 10 IP и не отменяется проверкой. Условия обслуживания

HTTP или SOCKS5?

Оставайтесь на HTTP, когда вы отправляете только веб-трафик и ваши инструменты уже умеют работать с HTTP-прокси. Переключайтесь на SOCKS5, когда клиенту нужно переносить что-то, что не является HTTP, или когда вы хотите, чтобы имена хостов резолвились на прокси и ничто посередине не могло править ваши заголовки. В любом случае это один и тот же продукт, который заказывается на странице ISP-прокси и описан также как статические резидентные прокси, без отдельного заказа и без платы за переключение. Вопросы по настройке разобраны в FAQ. Количество операторов и стран на этой странице берётся из снимка каталога, по которому собирается сайт, как описывает наша редакционная политика.

Источники

  • RFC 1928, SOCKS Protocol Version 5: спецификация 1996 года, согласование аутентификации, команды CONNECT, BIND и UDP ASSOCIATE и адреса назначения в виде доменных имён или адресов IPv6
  • RFC 1929, Username/Password Authentication for SOCKS V5: метод входа, который отправляет пароль открытым текстом
  • RFC 9110, HTTP Semantics: раздел 9.3.6, запрос CONNECT называет хост и порт назначения, и прокси открывает туннель к ним
  • curl man page: --socks5 резолвит имя хоста локально, --socks5-hostname позволяет резолвить его прокси
  • Everything curl, SOCKS proxy: socks5:// и socks5h:// в прокси-URL и то, какая сторона резолвит имя хоста
  • OpenBSD manual, ssh(1): -D настраивает локальную динамическую переадресацию портов, при которой ssh работает как сервер SOCKS4 и SOCKS5, а -N переадресует порты без выполнения удалённой команды