Приглашаю всех желающих присоединится к нашему open-source проекту. Идея — разработать универсальную систему дистанционного администрирования различных устройств. Планируется сделать систему, через которую можно будет удалённо управлять своими девайсами. Например, серверами в консольном режиме (ssh-like), десктопами в графическом (teamviewer like), мобильными устройствами, роутерами, медиацентрами, а в будущем микроволновками, стиральными машинами, освещением в доме, автомобилями, космическими кораблями и биологическими существами. Пока что разработка ведется для десктопов, на языке C++ с использованием библиотеки Qt. На данный момент у нас уже есть рабочий прототип. И что бы ускорить разработку нам нужен ты!
Описание системы
Рабочее названия проекта — Delta 3. Система состоит из трёх частей:
клиент — тот кто предоставляет своё устройство
сервер — отвечает за связь и взаимодействие клиентов и администраторов
администратор — тот, кто занимается администрированием устройств клиентов
Административная часть обеспечивает:
— возможность подключение к серверу
— административный интерфейс
— список доступных клиентов
— возможность подключится к клиенту в одном из режимов
— возможность осуществить настройку сервера
Клиентская часть обеспечивает:
— автоподключение к серверу
— работу в трее, в скрытом режиме или в виде сервиса/демона
— предоставление доступа к устройству в одном из режимов
Список режимов:
— консольный доступ (cmd/bash/etc)
— графический доступ (vnc-like)
— файловый доступ
— доступ к медиаустройствам (микрофон, камера)
— прокси доступ (возможность администратору использовать клиента как прокси)
— редирект трафика (возможность открытие порта у клиента и перенаправление трафика на администратора)
— прочие режимы
Протокол
При разработке подобной системы одним из важных пунктов является сетевой протокол. Перечень команд, которыми могут обмениваться части системы, работающие на различных устройствах. Сразу разработать один протокол, который будет одинаково хорош для всех режимов — задача сложная и не практичная. Поэтому вместо разработки единого протокола было принято решение сделать систему протоколов многоуровневой. Одни протоколы работают поверх других. На нижнем уровне — протокол, отвечающий за адресацию пакетов между клиентами и администраторами. На верхнем уровне — серия протоколов, по протоколу на каждый из режимов. Всего в системе задействовано три уровня.
Протокол первого уровня (Cspyp1) обеспечивает базовое соединение клиентов и администраторов c сервером, а так же пересылку команд между администратором-клиентом, и наоборот.
Протокол второго уровня (Cspyp2) работает поверх протокола первого уровня. Он обеспечивает получение информации о поддерживаемых режимах, а так же соединение по одному из режимов (списки режимов в описании).
Протоколы третьего уровня. Несколько протоколов (по одному протоколу на каждый режим). Обеспечивают функциональность, требуемую режимом. Для консольного режима один протокол третьего уровня, для графического режима — другой (например, на основе VNC), для аудио — третий, и т. п.
Протоколы первого и второго уровня — бинарные. Среди протоколов третьего уровня используются как бинарные, так и текстовые. Полное описание протоколов доступно в этом документе.
Реализация
Для начала мы решили сделать все три части системы для десктопа, на C++ & Qt. Преимущества Qt — кросплатформенность, большой набор классов, удобство разработки. В данный момент мы сделали сервер, клиент и администратор, обладающие минимальной функциональностью (сделан telnet режим, а так же, частично, графический).
Предложение
Предлагаю всем, кто пишет на C++, и у кого есть свободное время и желание помочь — присоединятся к проекту. Никаких требований по скилу, и т. п. нет. Нас интересуют:
1) Профессиональные программисты C++ и Qt. Если ваш скилл прокачан до небес, и вы пишете код с закрытыми глазами большим пальцем левой ноги — вы сможете нам помочь. Вы сможете, к примеру, сделать code-reveiw, заняться рефакторингом, плюнуть и переписать за пару часов весь имеющийся код так, что он будет блестеть. Или просто давать советы, тыкать пальцом в откровенные косяки и помогать остальным.
2) Начинающие программисты. В вашем институте читают pascal или basic? Ваш преподаватель по информатике не слышал про бинарный поиск или быструю сортировку? Вас заставляют учить философию вместо теории операционных систем? Вы — именно тот, кто нам нужен (если, конечно, вам будет интересно программировать на C++). Мы дадим вам задачу, с которой вы сможете справиться, а так же введём в курс дела — позвоним по скайпу и понятными русским словами скажем что нужно скачать, установить, почитать и написать. Вы сможете внести внести свой вклад в полезное дело, а так же прокачать скилл по направлениям: C++ & Qt, team work, сетевое программирование, системы контроля версий (git), умение работать с чужим кодом, unit-testing.
3) Разработчики для мобильных устройств, веб разработчики, тестеры и просто заинтересованные люди. Вы нужны нам чтобы наша система стала по настоящему универсальная, надёжная и понятная. Вы можете заняться разработкой клиента под ту мобильную платформу, на которой вы специализируетесь. Можете просто тестировать систему и репортить найденные баги. Можете заняться документацией и wiki. Можете присылать любые идеи и предложения.
4) Дизайнеры. Если вам больше интересна наиболее творческая составляющая IT — дизайн — вы тоже будете очень полезны. Мы хотим, чтобы наше приложение не только обладало полезной функциональностью, но и блистало современным, красивым и удобным интерфейсом.
5) Менеджеры, руководители проектов, тим-лиды и спонсоры. Если вы знаете, как правильно организовывать процесс разработки ПО, если вам интересно управление IT проектами или вы знаете как монетизировать проект, если вы спонсор и ищите куда вложить средства — вы тоже нам нужны. Проект всегда останется бесплатным для некоммерческого использования, исходные коды так же всегда останутся открытыми. Однако вполне возможно введение коммерческой лицензии для организаций.
Заключение
Последнее время довольно много начинающих разработчиков интересуется, где получить опыт разработки. Возможно, для вас ответом станет этот проект. Все кто решит присоединиться, пишите мне в ЛС, на e-mail — kovalev@quantion.ru, или в skype — filippfg. Let's code! It's fun!
Ссылки
Cерверная часть системы
Административная часть системы
Клиентская часть системы
Описание протокола
Видео-трансляция по разработке, часть 1
Видео-трансляция по разработке, часть 2
Автор: bak