Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСети и протоколы

socks5 против socks5h: куда уходит имя узла

dev_null_ru
dev_null_ru
Ветеран
сообщений 2560
с фев
1 мая, 08:52первое сообщение

Долго считал, что буква в строке подключения это мелочь на вкус. Гонял curl с socks5://, всё ехало, вопросов не возникало.

Потом поднял на машине свой кеширующий резолвер и от нечего делать заглянул в его лог. А там ровным строем все имена, по которым бегает ночной прогон. Выходит, машина сама бегает за адресами, посреднику достаются уже готовые четыре байта.

Дописал одну букву, стало socks5h://, лог резолвера опустел. Хочу понять, что переключается внутри и почему про эту букву нигде не пишут крупно.

curl -s -o /dev/null -w "%{remote_ip}\n" --proxy socks5://10.0.0.5:1080 https://example.org/
curl -s -o /dev/null -w "%{remote_ip}\n" --proxy socks5h://10.0.0.5:1080 https://example.org/
hexdump
hexdump
Знаток
сообщений 940
с июн
8 октября, 11:09#2

Буква h это hostname, и она переключает, кто именно превращает имя в адрес.

Внутри сокетного рукопожатия есть байт типа адреса. Единица означает адрес четвёртой версии, тройка означает имя строкой. Без h клиент сам спрашивает адрес у службы имён, получает четыре байта и кладёт в запрос единицу. С h клиент отдаёт строку как есть и ставит тройку, а за адресом идёт уже посредник со своей стороны.

кто спрашивает имя
кто спрашивает имя
veta_l
veta_l
Новичок
сообщений 210
с янв, второй сезон
15 марта, 14:26#3

а если утилита умеет только первую схему, что тогда делать

dev_null_ru
dev_null_ru
Ветеран
сообщений 2560
с фев
22 августа, 17:43#4
hexdump: за адресом идёт уже посредник со своей стороны

Вот этого куска мне и не хватало. veta_l, у меня так было с одной старой утилитой: там нашлась галка вида «имена разбирает посредник», названа по-своему, смысл тот же самый.

Артур Вагнер
Артур Вагнер
Знаток
сообщений 1290
с мая
1 января, 08:00#5

Соберу в одно место, кто как это пишет, чтобы не лазить по документации каждый раз.

curl держит два ключа: --socks5 оставляет имя себе, --socks5-hostname отдаёт его дальше. Короткая запись через --proxy socks5h:// делает ровно второе.

Python: сокетную схему requests тянет только с дополнением requests[socks], дальше в словаре адресов пишется socks5h://. Пропустите букву, и запрос уйдёт с локально добытым адресом.

Для ssh обычно берут ProxyCommand с nc, и там имя разбирает уже nc, так что смотреть надо его ключи.

ИнструментИмя разбирает машинаИмя разбирает посредник
curl--socks5--socks5-hostname
requestssocks5://socks5h://
ssh через ncnc -xnc -X 5 -x
Chromiumключ запуска без оговорок--host-resolver-rules
конфиг без комментария это загадка
grepwalker
grepwalker
Знаток
сообщений 1330
с мая
8 июня, 11:17#6

Добавлю сторону, которую видно на прогонах. Когда имя разбирает ваша машина, вы получаете тот адрес, который отдали вашей сети. Посредник потом стучится ровно туда. У крупных площадок за одним именем стоит десяток точек входа, и вы приезжаете совсем в другую, чем приехал бы посредник.

Отсюда растут жалобы вида «через посредника отдаётся другая страница». Букву поставил, и половина странностей ушла.

Артур Вагнер
Артур Вагнер
Знаток
сообщений 1290
с мая
15 ноября, 14:34#7

grepwalker, плюсую. Ещё оно ловится по времени отклика: локальный разбор имени добавляет свой круг по сети, иногда заметный.

конфиг без комментария это загадка
dev_null_ru
dev_null_ru
Ветеран
сообщений 2560
с фев
22 апреля, 17:51#8

Прошёлся по всем конфигам, где нашёл сокетную схему. Резолвер молчит вторые сутки, отказов на прогоне не прибавилось. Спасибо, буква оказалась говорящая.