Все локации активны · 99.99% uptime
SOCKS5

Как работает SOCKS5 прокси?

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

SOCKS5 — довольно простой протокол, определённый в RFC 1928. Простота и есть источник его силы: он вообще не интерпретирует данные прикладного уровня, а лишь переносит трафик TCP (и опционально UDP).

Трёхэтапное рукопожатие

СХЕМАЭтапы SOCKS5-соединения
РУКОПОЖАТИЕ01Приветствие(greeting)1 кругКлиент сообщаетподдерживаемые имметоды аутентификации02Методузлатот же кругСервер один из нихвыбирает илиотклоняет03Аутентификация1 кругВыбранный методприменяется (если требуется)04Запрос CONNECT1 кругСообщаются целевойадрес и порт05Передача данныхнеограниченноТеперь протокол — прозрачная трубавремя жизни соединения →

Если аутентификация не требуется, три круга сокращаются до двух. По сравнению с методом CONNECT в HTTP-прокси требуется немного больше кругов, но байтов намного меньше.

Этап 1 — Приветствие

В первом пакете клиент сообщает версию протокола и поддерживаемые им методы аутентификации:

СХЕМАПакет приветствия клиента
ЗАПРОСVER0x05Версия SOCKS: 5NMETHODS0x02Сколько методов предлагаетсяMETHODS[0]0x00Аутентификация не требуетсяMETHODS[1]0x02Имя пользователя / пароль

Сервер сообщает свой выбор однобайтовым ответом: 0x00 (аутентификация не требуется), 0x02 (логин/пароль) или 0xFF (нет подходящего метода).

Совет по отладке

Сервер 0xFF если возвращается и соединение закрывается, значит ваш клиент не предлагает метод аутентификации, которого ожидает сервер. Это самая частая причина жалобы «соединение закрылось без сообщений».

Этап 2 — Аутентификация

Если выбран метод 0x02, выполняется подсогласование, определённое в RFC 1929: байт версии, длина имени пользователя и имя пользователя, длина пароля и пароль. Сервер возвращает однобайтовый признак успеха/неудачи.

За подробным сравнением и практической настройкой к нашей статье об аутентификации SOCKS5 можно посмотреть.

Этап 3 — Запрос CONNECT

После прохождения аутентификации клиент сообщает цель. Здесь вступает в игру важнейшее проектное решение SOCKS5: адрес может быть задан в трёх разных форматах.

СХЕМАСтруктура запроса CONNECT
ЗАПРОСVER0x05ВерсияCMD0x0101=CONNECT, 02=BIND,03=UDPRSV0x00ЗарезервированоATYP0x0301=IPv4, 03=доменное имя,04=IPv6ADDRornek.comЦелевой адресPORT0x01BB443

ATYP=0x03 означает доменное имя; в этом случае DNS-разрешение выполняет прокси. Этот единственный байт — ключ к предотвращению утечки DNS.

Почему универсальнее, чем HTTP-прокси?

СХЕМАУровни, на которых работают два протокола
УРОВЕНЬ7ПриложениеHTTP / HTTPS / SMTP / FTPHTTP-прокси понимает только HTTP5СессияSOCKS5Не смотрит в содержимое, переносит всё4TCP / UDPПорт и надёжностьSOCKS5 поддерживает оба3СетьАдресация и маршрутизацияАдресация

HTTP-прокси читает и интерпретирует запрос; SOCKS5 только переносит. Поэтому через SOCKS5 одновременно могут проходить электронная почта, игры, передача файлов и трафик браузера.

ФункцияHTTP-проксиSOCKS5
Уровень работыПрикладной (7)Сеансовый (5)
Поддержка протоколовТолько HTTP(S)Любой TCP, опционально UDP
Интерпретация содержимогоДаМожет ли добавлять заголовки
Добавление заголовковМожетНе может
КешированиеВозможноНевозможно
Разрешение DNSНа стороне проксиНа выбор (ATYP)
Круг рукопожатия1 (CONNECT)2–3

За подробным сравнением разница между HTTP-прокси и SOCKS5 смотрите нашу статью.

Выполняет ли SOCKS5 шифрование?

Нет. Это самое распространённое заблуждение. SOCKS5 — транспортный протокол; он не предоставляет шифрования. Безопасность вашего трафика зависит от собственного шифрования передаваемого содержимого:

  • Если идёт по HTTPS: TLS защищает сквозным образом; прокси не видит содержимое.
  • Если это обычный HTTP: Оператор прокси может прочитать содержимое.
  • Учётные данные: Имя пользователя и пароль SOCKS5 передаются открытым текстом.
Замечание по безопасности

Учётные данные SOCKS5 передаются без шифрования. Если вы используете SOCKS5-прокси в ненадёжной сети, ваши учётные данные может прочитать наблюдатель посередине. В этом сценарии безопаснее использовать SOCKS5 через SSH-туннель — метод в отдельной статье — загляните туда.

Практическое применение

СХЕМАБазовые операции с SOCKS5
# подробный вывод curl — посмотрите строки CONNECT01# Разрешать DNS на стороне прокси (рекомендуется)02curl --socks5-hostname kullanici:sifre@proxy.example.com:1080 https://example.com0304# Разрешать DNS локально (риск утечки)05curl --socks5 proxy.example.com:1080 https://example.com0607# Через переменную окружения (многие инструменты её читают)08export ALL_PROXY="socks5h://kullanici:sifre@proxy.example.com:1080"0910# Python requests (для поддержки socks: pip install requests[socks])11proxies = {"http": "socks5h://kullanici:sifre@proxy.example.com:1080",12 "https": "socks5h://kullanici:sifre@proxy.example.com:1080"}1314# Тест: IP выхода15curl --socks5-hostname proxy.example.com:1080 -s https://ornek-ip.example/text

socks5h в схеме h означает "hostname" и обеспечивает выполнение DNS-разрешения на стороне прокси. Чтобы предотвратить утечку, всегда предпочитайте именно это.

Когда стоит выбрать SOCKS5?

Выберите SOCKS5

  • Если вы будете переносить протоколы помимо HTTP (электронная почта, FTP, игры).
  • Если вы хотите выполнять DNS-разрешение на стороне прокси.
  • Если нужен UDP-трафик.
  • Если вы не хотите, чтобы прокси трогал ваши заголовки.
  • Если приложение поддерживает только SOCKS.

Достаточно HTTP прокси

  • Если вы будете переносить только веб-трафик.
  • Если вам нужно кэширование.
  • Если ваш инструмент поддерживает только HTTP-прокси.
  • Если важно минимальное число кругов рукопожатия.
  • Если нужны корпоративные правила фильтрации.

Резюме

SOCKS5 — простой протокол сеансового уровня, который переносит трафик TCP и UDP, вообще не заглядывая в данные приложения. Благодаря трёхэтапному рукопожатию, поддержке трёх типов адресов и варианту с доменным именем он даёт возможность предотвратить утечку DNS. Шифрования он не обеспечивает; безопасность зависит от собственного шифрования передаваемого содержимого. Если вам нужно переносить не только веб-трафик, это правильный инструмент. За подробностями о продуктах на нашу страницу SOCKS5-прокси, для тестирования к нашему инструменту проверки прокси можно посмотреть.

Часто задаваемые вопросы

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

Нет. SOCKS5 — транспортный протокол, и он не предоставляет шифрования. Безопасность обеспечивается собственным шифрованием передаваемого содержимого; если вы используете HTTPS, содержимое защищено сквозным образом.

02В чём разница между socks5 и socks5h?

socks5h требует, чтобы DNS-разрешение выполнялось на стороне прокси; socks5 же разрешает локально. Чтобы предотвратить утечку, всегда предпочитайте socks5h.

03Моё SOCKS5-соединение закрывается без сообщений, почему?

Скорее всего, ваш клиент не предлагает метод аутентификации, которого ожидает сервер. Сервер возвращает 0xFF и закрывает соединение. Убедитесь, что клиент поддерживает метод «логин/пароль».

04SOCKS5 медленнее HTTP-прокси?

Рукопожатие занимает на один круг больше, но передаваемых байтов очень мало. На практике разница составляет несколько миллисекунд, и после начала передачи данных разницы в скорости между двумя протоколами нет.

05Все ли приложения поддерживают SOCKS5?

Нет. Браузеры, curl и большинство современных библиотек поддерживают; однако некоторые приложения знают только HTTP-прокси. В этом случае нужно поставить посередине конвертер протоколов.

Связанные статьи и страницы

СЛЕДУЮЩИЙ ШАГ

Усильте свою прокси-инфраструктуру уже сегодня.

Начните с платным тарифом за считанные минуты или сначала попробуйте наш бесплатный список прокси.

FREEPROXY.TR

Ищете бесплатные прокси — вы попали по адресу

Комплексная прокси-платформа, где можно посмотреть актуальные адреса бесплатных прокси, сравнить типы HTTP и SOCKS и проверить свои прокси-подключения бесплатными инструментами.