Russian Qt Forum
Ноябрь 23, 2024, 05:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Socks5 сервер на QT  (Прочитано 9141 раз)
FlexoID
Гость
« : Январь 04, 2009, 23:09 »

Всем привет. Начал знакомиться с QT совсем недавно, но возникла острая необходимость написать одну программу. Вот ее краткое описание.

Есть сторонняя сетевая программа, поддерживающая использование socks прокси. В моем положении использование этого прокси обязательно (особенность предоставления интернета провайдером), но также необходима возможность фильтрации траффика и некоторой его модификации. Решил поступить следующим образом



Как видно из схемы, моя программа должна быть и клиентом и сервером socks5 одновременно. С клиентом все просто - QNetworkProxy. Другое дело сервер. Как его можно реализовать с использованием сокетов QT? Надеюсь на людей, знакомых с принципами работы и написанием таких серверов.

Итого:
Задача сводится к написанию socks5 (хатя можно и socks4) сервера с помощью QT сокетов. Неоценимой также будет оказанная мне помощь в понимании работы socks сервера с кодом на любых нативных сокетах, сам протокол.

Заранее большое спасибо.
« Последнее редактирование: Январь 05, 2009, 00:48 от FlexoID » Записан
Dendy
Гость
« Ответ #1 : Январь 05, 2009, 00:11 »

Из схемы видно, что написание клиент-сервера - полная жопа.
Записан
FlexoID
Гость
« Ответ #2 : Январь 05, 2009, 00:29 »

Из схемы видно, что написание клиент-сервера - полная жопа.
Хотелось бы услышать вашу точку зрения по данному вопросу в более развернутом и менее резком виде.
Записан
Dendy
Гость
« Ответ #3 : Январь 05, 2009, 01:32 »

На Qt можно написать что угодно. В вашем случае будет некий класс Connection - совокупность клиентского сокета, серверного и логики между ними. Незнаю как работает Socks, подозреваю что интерфейс этой промежуточной части будет на паре QIODevice - на вход и на выход, если фильтрации никакой нет - трафик перенаправляется из одного в другой без изменений. Иначе - вклинивается некий плагин для фильтрации или их цепочка. Параллельно с этим фильтром внутри этого Connection будет работать некая система событий специфичная для Socks. Например, аутентификация, события разрыва связи.

Создайте пул потоков, в которых будут крутиться ваши соединения. Также не забывайте, что скорость, с которой стороны пишут с сокеты совершенно не обязательно должна совпадать с которой данные реально отдаются. Следите за буферами, одним словом.
Записан
FlexoID
Гость
« Ответ #4 : Январь 05, 2009, 02:02 »

Большое спасибо за пояснение QT-шной части моей задачи. Но все же основной проблемой остается написание socks-сервера. Кроме спецификации протокола, ничего толкового в нете не нашел, а по ней одной писать я к сожалению не могу... Не тот уровень у меня еще. Вот  прошу помощи, может кто подкинет пищи для размышлений.
Записан
Dendy
Гость
« Ответ #5 : Январь 05, 2009, 02:35 »

Соль в том, что SOCKS работает поверх транспортного уровня. Для разработчика это нужно понимать как то, что реализация протокола тривиально проста и никаких специальных библиотек не нужно. Глянул на спецификацию, она помещается на ладошке. Всё что вам нужно - вычленять пакеты с полезными данными и пропускать их через фильтр (который я бы делал на основе QIODevice), остальные пакеты перенаправлять на реальный сервер. Можете всё же их обрабатывать и использовать QNetworkProxy, почему нет.

Отбросьте фобии, вдохните и напишите свой парсер SOCKS.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 20.