Название: Socks5 сервер на QT Отправлено: FlexoID от Январь 04, 2009, 23:09 Всем привет. Начал знакомиться с QT совсем недавно, но возникла острая необходимость написать одну программу. Вот ее краткое описание.
Есть сторонняя сетевая программа, поддерживающая использование socks прокси. В моем положении использование этого прокси обязательно (особенность предоставления интернета провайдером), но также необходима возможность фильтрации траффика и некоторой его модификации. Решил поступить следующим образом (http://www.ii4.ru/images/876039shema.gif) Как видно из схемы, моя программа должна быть и клиентом и сервером socks5 одновременно. С клиентом все просто - QNetworkProxy. Другое дело сервер. Как его можно реализовать с использованием сокетов QT? Надеюсь на людей, знакомых с принципами работы и написанием таких серверов. Итого: Задача сводится к написанию socks5 (хатя можно и socks4) сервера с помощью QT сокетов. Неоценимой также будет оказанная мне помощь в понимании работы socks сервера с кодом на любых нативных сокетах, сам протокол. Заранее большое спасибо. Название: Re: Socks5 сервер на QT Отправлено: Dendy от Январь 05, 2009, 00:11 Из схемы видно, что написание клиент-сервера - полная жопа.
Название: Re: Socks5 сервер на QT Отправлено: FlexoID от Январь 05, 2009, 00:29 Из схемы видно, что написание клиент-сервера - полная жопа. Хотелось бы услышать вашу точку зрения по данному вопросу в более развернутом и менее резком виде.Название: Re: Socks5 сервер на QT Отправлено: Dendy от Январь 05, 2009, 01:32 На Qt можно написать что угодно. В вашем случае будет некий класс Connection - совокупность клиентского сокета, серверного и логики между ними. Незнаю как работает Socks, подозреваю что интерфейс этой промежуточной части будет на паре QIODevice - на вход и на выход, если фильтрации никакой нет - трафик перенаправляется из одного в другой без изменений. Иначе - вклинивается некий плагин для фильтрации или их цепочка. Параллельно с этим фильтром внутри этого Connection будет работать некая система событий специфичная для Socks. Например, аутентификация, события разрыва связи.
Создайте пул потоков, в которых будут крутиться ваши соединения. Также не забывайте, что скорость, с которой стороны пишут с сокеты совершенно не обязательно должна совпадать с которой данные реально отдаются. Следите за буферами, одним словом. Название: Re: Socks5 сервер на QT Отправлено: FlexoID от Январь 05, 2009, 02:02 Большое спасибо за пояснение QT-шной части моей задачи. Но все же основной проблемой остается написание socks-сервера. Кроме спецификации протокола, ничего толкового в нете не нашел, а по ней одной писать я к сожалению не могу... Не тот уровень у меня еще. Вот прошу помощи, может кто подкинет пищи для размышлений.
Название: Re: Socks5 сервер на QT Отправлено: Dendy от Январь 05, 2009, 02:35 Соль в том, что SOCKS работает поверх транспортного уровня. Для разработчика это нужно понимать как то, что реализация протокола тривиально проста и никаких специальных библиотек не нужно. Глянул на спецификацию, она помещается на ладошке. Всё что вам нужно - вычленять пакеты с полезными данными и пропускать их через фильтр (который я бы делал на основе QIODevice), остальные пакеты перенаправлять на реальный сервер. Можете всё же их обрабатывать и использовать QNetworkProxy, почему нет.
Отбросьте фобии, вдохните и напишите свой парсер SOCKS. |