программирование SOCKS5 обмена

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

программирование SOCKS5 обмена

Непрочитанное сообщение Olej » 03 фев 2016, 14:26

Возникла такая задача - отладить SOCKS5 обмен.

Протокол SOCKS в достаточной мере описан здесь: SOCKS.

Наброски реализации (скорее проблемы, чем решения) можно посмотреть здесь:
C++ Socks5 проблемы в коммуникации

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: программирование SOCKS5 обмена

Непрочитанное сообщение Olej » 03 фев 2016, 15:25

Olej писал(а):Возникла такая задача - отладить SOCKS5 обмен.
Логика там крайне простая (если не затрагивать аутентификацию и только для TCP протокола):
- клиент, который хочет использовать SOCKS, конектится вместо требуемого TCP сервера IP:port к прокси-серверу SOCKS5 IP:port
- клиент с прокси-серверу SOCKS5 обмениваются 2-мя сообщениями запрос-ответ
- во 2-м сообщении клиент передаёт требуемого TCP сервера IP:port
- если всё нормально, прокси-сервер SOCKS5 устанавливает соединение с запрошенным сервером TCP
- клиент гонит (и читает) данные в открытый сокет к прокси-серверу SOCKS5...
- а тот ретранслирует весь TCP поток между клиентом и TCP сервером.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: программирование SOCKS5 обмена

Непрочитанное сообщение Olej » 03 фев 2016, 15:54

Olej писал(а):
Olej писал(а):Возникла такая задача - отладить SOCKS5 обмен.
Логика там крайне простая (если не затрагивать аутентификацию и только для TCP протокола):
Рассказывать долго, но если кому любопытно - вот есть проект с кодом ... свеже выпеченный ;-)
Там есть 4 приложения (иначе без этого не отладиться):
- tcpserv - TCP эхо-сервер
- tcpcli - для него отладочный клиент (сделан так ещё потому, что меня просили его воспроизвести для Windows)
- sockcli - клиент, который обращается через SOCKS-прокси к tcpserv
- proxyserv - сам SOCKS прокси-сервер.
Работаю по протоколу SOCKS5 без авторизации (так как SOCKS4).
Вот здесь - все 3 красавца ;-) :

Код: Выделить всё

olej@nvidia ~/2016_WORK/in.WORK/bcbs/socks5 $ ./tcpserv -vvv
listening on the TCP port 60000
127.0.0.1:46199 <= 127.0.0.1:60000
123
34567

olej@nvidia ~/2016_WORK/in.WORK/bcbs/socks5 $ ./sockcli -vv
through SOCKS 5 127.0.0.1:40000 connect to TCP host 127.0.0.1:60000
-> <5|1|0>
<- <5|0>
-> <5|1|0|1| 127 0 0 1 |234.96>
<- <5|0|0|1| 127 0 0 1 |234.96>
ready for enter:
123
123
34567
34567
^C

olej@nvidia ~/2016_WORK/in.WORK/bcbs/socks5 $ ./proxyserv -vv
SOCKS5 proxy is ready on port 40000
ID=1 <------
<- <5|1|0>
-> <5|0>
<- <5|1|0|1| 127 0 0 1 |234.96>
request for host 127.0.0.1 TCP port 60000
Connection refused
-> <5|5|0|1| 127 0 0 1 |234.96>
ID=1 ------>
ID=2 <------
<- <5|1|0>
-> <5|0>
<- <5|1|0|1| 127 0 0 1 |234.96>
request for host 127.0.0.1 TCP port 60000
-> <5|0|0|1| 127 0 0 1 |234.96>
host 127.0.0.1 порт 60000
123
123
34567
34567
connection closed by client
ID=2 ------>
^C
Опции -vv повышают уровень отладочного вывода ... без них мусора будет выводится гораздо меньше.
Вложения
socks5.tgz
(11.08 КБ) 183 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: программирование SOCKS5 обмена

Непрочитанное сообщение Olej » 03 фев 2016, 21:31

Вот ещё очень интересная статья, близко в тему: Создаём SOCKS5-прокси с помощью SSH-соединения через удалённый сервер в Linux.
Основные вещи даже есть смысл зацитировать (страничка то хлипенькая, завтра её может не оказаться на месте):
Cоздать SOCKS5-прокси довольно просто. Достаточно выполнить команду по следующей схеме:

ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер>

Где
-f Запросит ssh перейти в фоновый режим только перед выполнением команды.
-C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).
-2 Принуждает ssh использовать только протокол версии 2.
-q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.
-T Отменить переназначение терминала.
-n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).
-N Не выполнять удаленную команду.
-D [локальный IP : ] порт

Например:

ssh -f -C2qTnN -D 1080 roman@8.8.8.8

После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.
Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS5 прокси в параметрах соединения.

Устанавливаем там пункт «Ручная настройка сервиса прокси», в поле «Узел SOCKS» пишем наш IP адрес (обычно 127.0.0.1), а в поле «Порт» — указанный порт (в примере 1080).
Ставим ключ на пункт «SOCKS 5» и применяем настройки.

После чего идём на любой сайт для определение IP-адреса.
Например: ip.rkbs.net и видим в значении IP Address не свой IP, а IP удалённого сервера, к которому мы установили SSH-соединение.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: программирование SOCKS5 обмена

Непрочитанное сообщение Olej » 03 фев 2016, 21:42

А вот "самое то" как компонент для тестирования таких проектов - Релиз SOCKS v4/v5 прокси Dante 1.2.0:
Во вторник, 27 октября 2009, был подготовлен и представлен норвежской компанией Inferno Nettverk A/S релиз SOCKS v4/v5 прокси Dante 1.2.0. Стоит отметить, что версия 1.1 была выпущена ещё в далёком в 1999 году, а последний корректирующий релиз 1.1.19 - в 2006 году. Dante всё так же популярен среди сторонников Linux. Inferno Nettverk специализируется на услугах, связанных с разработкой программного обеспечения и перенесением на UNIX/Linux и embedded/real-time платформы. Дополнительную информацию об услугах компании можно получить здесь: http://www.inet.no/english/services.html.
Программное обеспечение Dante состоит из двух частей, упакованных в один архив:

Часть сервера, поддерживающая socks v4 и socks v5.
Часть клиента, поддерживающая socks v4, socks v5, http v1.0, и UPnP.
Сайт проекта Dante - A free SOCKS server, с документацией и всякими прелестями.....

Но даже ничего искать не надо:

Код: Выделить всё

olej@nvidia ~/2016_WORK/in.WORK $ apt search dante
p   dante-client                    - SOCKS wrapper for users behind a firewall 
p   dante-server                    - SOCKS (v4 and v5) proxy daemon (danted)   

Код: Выделить всё

olej@nvidia ~/2016_WORK/HISTORY.nvidia/02/03 $ apt install dante-server dante-client
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  libdsocksd0
НОВЫЕ пакеты, которые будут установлены:
  dante-client dante-server libdsocksd0
обновлено 0, установлено 3 новых пакетов, для удаления отмечено 0 пакетов, и 21 пакетов не обновлено.
Необходимо скачать 197 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 728 kB.
Хотите продолжить? [Д/н] y
Получено:1 http://ftp.tu-chemnitz.de/pub/linux/ubuntu/ trusty/universe libdsocksd0 i386 1.1.19.dfsg-3ubuntu11 [79,2 kB]
Получено:2 http://ftp.tu-chemnitz.de/pub/linux/ubuntu/ trusty/universe dante-client i386 1.1.19.dfsg-3ubuntu11 [10,8 kB]
Получено:3 http://ftp.tu-chemnitz.de/pub/linux/ubuntu/ trusty/universe dante-server i386 1.1.19.dfsg-3ubuntu11 [107 kB]
Получено 197 kБ за 0с (364 kБ/c)           
Выбор ранее не выбранного пакета libdsocksd0.
(Чтение базы данных … на данный момент установлено 242109 файлов и каталогов.)
Preparing to unpack …/libdsocksd0_1.1.19.dfsg-3ubuntu11_i386.deb ...
Unpacking libdsocksd0 (1.1.19.dfsg-3ubuntu11) ...
Выбор ранее не выбранного пакета dante-client.
Preparing to unpack …/dante-client_1.1.19.dfsg-3ubuntu11_i386.deb ...
Unpacking dante-client (1.1.19.dfsg-3ubuntu11) ...
Выбор ранее не выбранного пакета dante-server.
Preparing to unpack …/dante-server_1.1.19.dfsg-3ubuntu11_i386.deb ...
Unpacking dante-server (1.1.19.dfsg-3ubuntu11) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
Настраивается пакет libdsocksd0 (1.1.19.dfsg-3ubuntu11) …
Настраивается пакет dante-client (1.1.19.dfsg-3ubuntu11) …
Настраивается пакет dante-server (1.1.19.dfsg-3ubuntu11) …
Not starting Dante SOCKS daemon: not configured.
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
Processing triggers for ureadahead (0.100.0-16) ...

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей