Ключевые слова: программа, программное обеспечение, OSINT, обработчик событий, бот, поиск.
Кто владеет информацией, тот владеет миром.
Натан Майер Ротшильд (1777–1836), немецкий бизнесмен
Студенческая жизнь айтишника требует не столько большого количества программного обеспечения, сколько оперативный доступ к нему. Конечно, большую часть потребностей способен удовлетворить вуз, но из-за сложившийся политической ситуации студенты вынуждены пользоваться многими программами только в университете ввиду того, что удаленный доступ также работал на компонентах недружественных к РФ стран.
Разумеется, можно просто потратить чуть больше времени на прямой поиск в интернете нужной программы (OSINT, open-source intelligence, разведка на основе открытых данных), но часто это отнимает немалый объем времени и ставит риск поражения вашего компьютера вредоносным ПО.
Мы же как студенты информационной безопасности решили разработать собственную систему по обмену программным обеспечением. Система представляет из себя бота для Telegram, html-страницу, по которой программа осуществляет парсинг (принятое в информатике определение синтаксического анализа) и систему хранения данных, в нашем случае программ.
Первым делом наша команда провела анкетирование, в котором мы искали ответ на вопрос «А нужна ли такая система?».
Рис. 1. Вопросы анкеты.
В анкету мы включили вопросы, конкретизирующие проблемы, возникающие у студентов при поиске ПО как то: затраченное время, круг необходимых программ, действия по поиску.
Эти данные мы учли при разработке бота. Он должен быть быстрым, безопасным, охватывать максимальное число программ и не требовать специальной настройки. Поэтому нами и был выбран Telegram в качестве платформы для осуществления работы модели «пользователь-СХД».
Рис. 2. Таблица с результатами анкетирования
Для разработки программы мы выбрали язык Python 3.8.6. Его синтаксис и функции наиболее удобны для обработки требуемых параметров. Основным двигателем бота выступила библиотека telebot.
Первоначально нами рассматривалась библиотека aiogram из-за встроенных возможностей оплаты через привязку карты и безопасную транзакцию внутри самого Telegram. Но в ходе начальных этапов тестирования было принято решение отказаться от нее из-за сложностей с монтажом платежной системы и конфликта с нашей html-библиотекой, а также проблем с быстродействием при массовой нагрузке.
Рис. 3. Сбои в работе aiogram возникли при 28 подключениях, а у telebot — 40.
Весь функционал бота реализуется по средствам двух обработчиков событий: message_handler(commands= ['start']) — реализует обработку приветствий (/start — начало общения) и обработку четырехкнопочной клавиатуры, которая служит для осуществления навигации внутри бота; message_handler(content_types= ['text']) — реализует обработку текстовых обращений к боту и нажатия на кнопки.
Рис. 4. Для создания клавиатуры используется метод ReplayKeyboardMarkup. Для создания клавиш — KeyboardButton
Рис. 5. Строки 29–30 содержат в себе обработчик событий и советующую функцию
В боте также присутствует система оплаты, которая на данном этапе реализована через считывание и проверку ботом никнейма пользователя Telegram. То есть пользователь оплачивает подписку и модератор в течение 24 часов с момента оплаты открывает доступ к функциям системы. В дальнейшем данную схему планируется дорабатывать.
Поиск нужной программы производится через нажатие нужной кнопки с названием программы из меню, прикрепленного к сообщению, которым отвечает бот на запрос пользователя.
По своей сути такая система аналогична прямому вводу названия в текстовое поле диалога, однако она не предусматривает ошибки, которые может допустить пользователь при вводе названия программы.
Но в целом, поиск по ключевым словам, является более удобным, хотя и менее точным. Такая функция будет добавлена в дальнейших версиях программы.
Теперь же перейдем к части, касающейся обратной связи.
Как и было сказано выше, в нашей программе для поиска используется парсинг данных с html-страницы.
Парсинг состоит из трех этапов:
- Поиск
- Извлечение
- Сохранение
Для реализации поиска мы использовали библиотеки beautifulsoup4, requests и pandas.
Первым этапом формируется get-запрос по структуре r = requests.get(‘ссылка’). Далее при помощи аргумента text получаем весь html-код нашей страницы.
Теперь при помощи ограничения параметров добиваемся получения ссылок на программу в зависимости от введенного названия. Каждая ссылка содержит свой уникальный id:
Рис. 6
После чего пользователю выдается соответствующая ссылка, по которой он может скачать программу, и которая является абсолютно безопасной.