В RFC на сокс5 так описывается ответ на Connect:
CONNECT
In the reply to a CONNECT, BND.PORT contains the port number that the server assigned to connect to the target host, while BND.ADDR contains the associated IP address. The supplied BND.ADDR is often different from the IP address that the client uses to reach the SOCKS server, since such servers are often multi-homed. It is expected that the SOCKS server will use DST.ADDR and DST.PORT, and the client-side source address and port in evaluating the CONNECT request.
Не совсем понятно, для чего же вообще используются эти BND.ADDR и BND.PORT (такое чувство, что используются они, вообще говоря, редко). Насколько я понимаю, это адрес-порт, по которому клиент может установить ещё одно data-соединение с целевым хостом. При этом, "контрольное" соединение также переходит в режим передачи данных.
То есть, это как бы предусмотрено, чтобы снизить задержку при установлении ещё одного соединения через прокси к целевому хосту? Или?
Чисто экспериментально:
1. Сервер WinSocks позволил использовать дополнительное соединение, оба соединения стали работать в режиме передачи данных между клиентом и целью.
2. Socks-сервер из пакета 3proxy возвращает несколько странные адреса (клиент стучится к нему из localhost, а он возвращает в ответе адрес-порт интерфейса, глядящего в локальную сеть). И не позволяет устанавливать с этим адресом соединение (ошибка "Connection refused").
Складывается впечатление, что или стандарт слишком вольный и допускает двусмысленные трактовки, либо не все прокси считают нужным этот стандарт выполнять.
В общем, вопроса два:
1. Если кто знает: что, всё-таки, означает этот возвращаемый socks-сервером по стандарту адрес? Какое должно быть стандартное поведение?
2. Эта часть стандарта в принципе не слишком часто поддерживается реализациями socks-серверов?