Попробовать
Назад к блогу

SOCKS4 и SOCKS5: чем отличаются протоколы и какой выбрать

SOCKS4 и SOCKS5: чем отличаются протоколы и какой выбрать

SOCKS5 умеет всё, что умеет SOCKS4, и добавляет то, без чего не обходятся современные программы: авторизацию по логину и паролю, передачу UDP, IPv6 и возможность отправить прокси доменное имя вместо IP. SOCKS4 открывает только TCP-соединения с IPv4-адресами и узнаёт клиента по строке идентификатора без пароля. Неофициальное расширение SOCKS4a научило его принимать имена хостов, и на этом развитие версии закончилось.

В 2026 году SOCKS4 встречается в основном в старых программах и бесплатных прокси-листах. Тем не менее сравнивать версии стоит на уровне байтов: именно там объяснение реальных проблем — утечек DNS, отказов в авторизации, игр, которые не подключаются. Ниже — как выглядит рукопожатие каждой версии, таблица возможностей, что означает буква «h» в socks5h и короткая инструкция по выбору.

SOCKS5-прокси

SOCKS5-прокси с авторизацией по логину и паролю для любых программ

Попробовать

Откуда взялись две версии

SOCKS появился в начале 1990-х как способ выпускать компьютеры из-за корпоративного файрвола в интернет через один контролируемый шлюз — Дэвид Коблас описал его в докладе 1992 года. SOCKS4 описал Ин-Да Ли из NEC в коротком документе, который так и не стал RFC; его же небольшим дополнением стал SOCKS4a.

SOCKS5 прошёл через IETF и вышел как RFC 1928 в марте 1996 года. Авторизацию описывают два сопутствующих документа: RFC 1929 — логин и пароль, RFC 1961 — GSSAPI, механизм в духе Kerberos для корпоративных сетей. Если сначала нужна общая картина, начните со статьи о том, что такое SOCKS5-прокси.

Как выглядит запрос SOCKS4

В SOCKS4 нет никаких согласований. Клиент отправляет один пакет и получает один ответ:

04 01 01 BB CB 00 71 0A 00

Здесь 04 — версия, 01 — команда (1 — CONNECT, 2 — BIND), 01 BB — порт 443, CB 00 71 0A — адрес 203.0.113.10, а последний 00 завершает пустой идентификатор пользователя. Сервер отвечает восемью байтами, и во втором из них вердикт: 90 — разрешено, 91 — отказ, 92 и 93 — сбои, связанные с identd, старой службой, которая проверяла имя пользователя на машине клиента.

Четыре кода — вся доступная диагностика. Неверный адрес, закрытый порт и запрещённое направление выглядят для клиента одинаково.

SOCKS4a и имена хостов

Обычному SOCKS4 нужен IPv4-адрес, поэтому домен клиент разрешает сам. SOCKS4a обходит это хитростью: клиент передаёт заведомо неверный адрес 0.0.0.x, где x не ноль, а после идентификатора дописывает имя хоста. Сервер с поддержкой 4a сам находит IP по имени, а старый сервер SOCKS4 просто возвращает ошибку.

Как договариваются клиент и сервер SOCKS5

SOCKS5 делит разговор на этапы:

  1. Приветствие. Клиент перечисляет поддерживаемые способы авторизации, например 05 02 00 02: версия 5, два метода — «без авторизации» и «логин и пароль».
  2. Выбор метода. Сервер выбирает один, скажем 05 02, или отвечает FF, если ни один не подходит.
  3. Авторизация. При методе 02 клиент отправляет логин и пароль по RFC 1929 и получает «успех» или «отказ».
  4. Запрос. Клиент передаёт команду (01 CONNECT, 02 BIND, 03 UDP ASSOCIATE) и адрес одного из трёх типов: IPv4, доменное имя или IPv6.
  5. Ответ. Код 00 означает успех, остальные восемь точно называют причину сбоя — от «соединение запрещено правилами» до «хост недоступен» и «в соединении отказано».

Лишние обмены стоят нескольких миллисекунд при открытии соединения. Дальше обе версии делают одно и то же: копируют байты между двумя TCP-сокетами.

Сравнение возможностей

SOCKS4SOCKS4aSOCKS5
СпецификацияДокумент NEC, без RFCДополнение к SOCKS4RFC 1928 (1996)
TCP-соединения (CONNECT)ДаДаДа
Входящие соединения (BIND)ДаДаДа
UDPНетНетДа, через UDP ASSOCIATE
Адреса IPv6НетНетДа
Разрешение имён на проксиНетДаДа
АвторизацияТолько идентификатор, без пароляТолько идентификаторЛогин и пароль, GSSAPI
Коды ответа449
Обменов до начала передачи данных112–3
Шифрование трафикаНетНетНет

DNS: socks4, socks4a, socks5 и socks5h

Кто разрешает доменное имя, зависит и от протокола, и от клиента. В curl это видно по четырём схемам адреса прокси:

  • socks4:// — имя разрешается на вашем компьютере, прокси получает IP;
  • socks4a:// — имя уходит на прокси;
  • socks5:// — разрешение локальное, хотя протокол позволяет передать имя;
  • socks5h:// — имя передаётся прокси, «h» означает hostname.

У локального разрешения два побочных эффекта. DNS-запросы по-прежнему уходят на сервер вашего провайдера, и он видит, какие сайты вы открываете. А сети доставки контента выбирают узел рядом с DNS-сервером, а не рядом с прокси, поэтому страница может прийти из другого региона. В Firefox тот же выбор вынесен в отдельный флажок настроек прокси (в английском интерфейсе — «Proxy DNS when using SOCKS v5»), а библиотека requests в Python тоже понимает схему socks5h://.

UDP на практике

Поддержку UDP чаще всего называют главным плюсом SOCKS5 — и чаще всего переоценивают. Через UDP ASSOCIATE клиент по TCP просит у сервера ретранслятор, получает адрес и порт для датаграмм, и дальше каждый пакет идёт с небольшим SOCKS-заголовком. Связка живёт, пока открыто управляющее TCP-соединение.

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

Авторизация и безопасность

Идентификатор в SOCKS4 — это подпись, а не пароль: клиент может назваться кем угодно. Поэтому провайдеры, которые ещё предлагают SOCKS4, ограничивают доступ по IP клиента, а это неудобно в мобильных сетях, где адрес постоянно меняется.

SOCKS5 добавляет настоящие учётные данные, но с оговоркой: по RFC 1929 логин и пароль передаются в открытом виде. Сами данные не шифрует ни одна версия. HTTPS-страницы защищены собственным TLS, а вот открытые протоколы внутри туннеля по дороге до прокси читаются. В недоверенных сетях пускайте SOCKS через SSH или VPN. Это же ещё один довод против случайных бесплатных прокси: их списки полны открытых серверов SOCKS4 с неизвестными владельцами.

SOCKS5 или SOCKS4: что выбрать

По умолчанию выбирайте SOCKS5. Он работает в браузерах, Telegram, антидетект-браузерах, парсерах и системных клиентах, поддерживает логины, удалённый DNS и IPv6, а ошибки у него понятные. Наши SOCKS5-прокси авторизуются по логину и паролю, поэтому работают и с устройств, у которых меняется IP.

SOCKS4 или SOCKS4a — только если выбора нет: старая программа, встроенное устройство или библиотека, которая не знает ничего новее. В этом случае берите 4a, чтобы имена разрешались на прокси, и добавьте свой IP в белый список в кабинете провайдера.

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

Частые вопросы о SOCKS4 и SOCKS5

SOCKS4 быстрее, чем SOCKS5?

Только в момент открытия соединения: SOCKS4 нужен один обмен вместо двух-трёх. Когда туннель установлен, обе версии передают одни и те же байты, и скорость с пингом не отличаются.

Подключится ли клиент SOCKS5 к серверу SOCKS4?

Напрямую нет: первый байт содержит номер версии, и чистый сервер SOCKS4 отклонит всё остальное. Впрочем, многие серверы принимают обе версии на одном порту и отвечают каждому клиенту на его языке.

Поддерживает ли SOCKS4 логин и пароль?

Нет. Он передаёт только строку идентификатора без пароля, поэтому доступ обычно ограничивают по IP клиента. Для авторизации с паролем нужен SOCKS5.

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

Нет. SOCKS5 проверяет клиента, но пересылает данные как есть, и даже пароль идёт открытым текстом. Шифрование даёт прикладной протокол, например HTTPS, или туннель SSH либо VPN поверх прокси.

Как узнать, какую версию SOCKS использует прокси?

Посмотрите документацию провайдера или проверьте оба варианта: curl --socks5 host:port https://api.ipify.org и то же самое с --socks4. Версия, которая вернула IP-адрес, и есть протокол сервера.