Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348

Создание системы для активирования ПО

06.01.2021, 14:52. Показов 5019. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Есть задача. Необходимо создать систему для активирования ПО собственного производства. ПО написано на С++.
Нужно создать клиентскую и серверную часть.
Сценарий стандартный. Покупатель заполняет форму онлайн и производит оплату. Ему на почту приходит ключ. ПО при первом пуске выдает форму активации. Покупатель вводит ключ. ПО обращается к серверу, который проверяет ключ и производит активацию.

Детали не прошу. Прошу помощи в направлении где копать и какую инфу почитать. Возможно есть какие туторы. Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2021, 14:52
Ответы с готовыми решениями:

Ищу желающих для создание программного обеспечение для системы ЕГАИС
Здравствуйте Уважаемые! Есть опыт работы с системой ЕГАИС и УТМ, есть несколько батников и приложение для работы с системой, но теперь...

Создание поисковой системы для сайта
Мне для сайта нужно сосздать поисковую систему. Я ее хотел сделать классной, так чтоб поиск велся не по целому слову, а по его корню. У...

Создание БД для автоматизации системы премирования
Помогите пожалуйста создать БД для автоматизации системы премирования инженерно технических работников

4
Модератор
 Аватар для vxg
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
06.01.2021, 19:41
если нет желания творить оверкилл то лучше, наверное, сделать так:
- ПО стартует, ищет на диске ключ
- если ключ не найден или он плохой - генерирует случайную последовательность и предлагает отправить ее вместе с запросом на активацию на ваш адрес электронной почты
- договорившись и получив оплату вы подписываете переданную случайную последовательность приватным ключом и отправляете подпись пользователю
- теперь когда ПО стартует оно находит на диске случайную последовательность и ее подпись и при помощи публичного ключа проверяет подпись
минусы:
- пользователи грустят ожидая пока вы рассмотрите запрос на активацию который пришел в ваш день рождения в 23:00
- пользователи передают друг другу ключ и не платят деньги (можно попробовать побороть это и причинить пользователям сильную боль если при генерации случайной последовательности использовать данные об аппаратном обеспечении ПК на котором запущено ПО - пользователи придут за вами с вилами и криками "мы платим бабки" в случае замены железа)
- если ваше ПО нужно всем и каждому пользователи при помощи хакера Васи с первого курса специализированного колледжа или просто энтузиаста находят в вашем голом коде место(а) проверки подписи и вставляют инструкции обходящие его
в любом случае (особенно когда оно все "само" через платежную систему) вам нужно будет оформить ИП и/или подавать заковыристые декларации или ждать
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
06.01.2021, 20:08  [ТС]
vxg, Спасибо за ответ, но проблема немного не в этом. Допустим у меня есть комп с Убунтой (или Виндой). Мне из него нужно сделать сервер активации. Какие средства (пакеты) нужно доставить в систему для создания такого сервера и каким образом из проекта на С++ организовать обращение к этому серверу (использовать какую-нибудь подключаемую библиотеку со специальными функциями).
0
Модератор
 Аватар для vxg
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
07.01.2021, 11:05
Лучший ответ Сообщение было отмечено fao как решение

Решение

fao, есть два ответа на ваш вопрос: тот который вы хотите услышать и правильный.
тот который вы хотите услышать:
- если делать свой web-сервер с использованием сокетов - все компоненты уже есть в вашей системе (на win к проекту возможно потребуется подключить lwsock32 и lws2_32, на lin на g++ все и так взлетит)
- если использовать библиотечные web-сервера, например, boost::asio, то надо подключать к проекту lboost_system
- если данные пойдут через защищенный канал (HTTPS) нужно будет подключать OpenSSL
- взаимодействие организуется соответственно например так (незащищенный канал, проверки ошибок опущены):
сокеты - сервер (win, блокирующий режим)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <winsock2.h>
#include <WS2tcpip.h>
#include <windows.h>
...
    WSADATA wsa_data;
    WSAStartup(0x101, &wsa_data);
    ...
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = 8081;
    sa.sin_addr.S_un.S_addr = inet_addr("0.0.0.0");
 
    bind(s, (SOCKADDR *)&sa, sizeof(sa));
    listen(s, SOMAXCONN);
 
    SOCKET ns;
 
    SOCKADDR_IN nsa;
    int sizeof_nsa = sizeof(nsa);
 
    ns = accept(s, (SOCKADDR *)&nsa, &sizeof_nsa);
 
    recv(ns ...);
    send(ns ...);

сокеты - клиент (win, блокирующий режим)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <winsock2.h>
#include <WS2tcpip.h>
#include <windows.h>
...
    WSADATA wsa_data;
    WSAStartup(0x101, &wsa_data);
    ...
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = 8081;
    sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 
    connect(s, (SOCKADDR *)&sa, sizeof(sa));
    send(s ...);
    recv(s ...);

boost::asio - сервер
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <boost/asio.hpp>
 
using namespace boost::asio;
 
io_service service;
ip::tcp::endpoint ep(ip::address::from_string("0.0.0.0"), 8081);
ip::tcp::socket sock(service);
ip::tcp::acceptor acc(service, ep);
 
void read_handler(const boost::system::error_code &ec, size_t bytes);
void write_handler(const boost::system::error_code &ec, size_t bytes);
 
void read_handler(const boost::system::error_code &ec, size_t bytes)
{
    if (все прочитано и хочется писать)
    {
        sock.async_write_some(... write_handler);
    }
    else
    {
        sock.async_read_some(... read_handler);
    }
}
 
void write_handler(const boost::system::error_code &ec, size_t bytes)
{
    if (все записано и хочется читать)
    {
        sock.async_read_some(... read_handler);
    }
    else
    {
        sock.async_write_some(... write_handler);
    }
}
 
void accept_handler(const boost::system::error_code &ec)
{
    sock.async_read_some(... read_handler);
}
 
int main(int argc, char *argv[])
{
    acc.async_accept(sock, accept_handler);
    service.run();
    return 0;
}

boost::asio - клиент
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <boost/asio.hpp>
 
using namespace boost::asio;
 
io_service service;
ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 8081);
ip::tcp::socket sock(service);
 
void read_handler(const boost::system::error_code &ec, size_t bytes);
void write_handler(const boost::system::error_code &ec, size_t bytes);
 
void read_handler(const boost::system::error_code &ec, size_t bytes)
{
    if (все прочитано и хочется писать)
    {
        sock.async_write_some(... write_handler);
    }
    else
    {
        sock.async_read_some(... read_handler);
    }
}
 
void write_handler(const boost::system::error_code &ec, size_t bytes)
{
    if (все записано и хочется читать)
    {
        sock.async_read_some(... read_handler);
    }
    else
    {
        sock.async_write_some(... write_handler);
    }
}
 
void connect_handler(const boost::system::error_code &ec)
{
    sock.async_write_some(... write_handler);
}
 
int main(int argc, char *argv[])
{
    sock.async_connect(ep, connect_handler);
    service.run();
    return 0;
}


Добавлено через 20 минут
fao, а теперь - почему, возможно, не стоит бросаться это делать: если у вас будет свой сервер активации вам нужно будет самому обеспечить его доступность: белый IP-адрес у адекватного провайдера с адекватной поддержкой и возможностью переключения на резервный адрес на случай если вас накроет по ошибке ковровой блокировкой, широкий, надежный и крайне желательно резервированный канал связи + работа 24/7 со всеми вытекающими (производительный, надежный, выделенный именно под активацию сервер - надежный и в плане ОС и в плане аппаратного обеспечения, RAID, ИБП, крайне желательно резервирование самого сервера и/или наличие ЗИП) - легче отдать все эти труды на ровном месте хостеру

Добавлено через 4 минуты
fao, кроме того - сервер активации на плюсах - это прекрасный способ на ровном месте написать велосипедов и отстрелить себе половину головы - легче поручить обработку этих тривиальных запросов скриптовым языкам вроде PHP или python - на них вы решите эту задачу быстрее и с более предсказуемым результатом
1
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
07.01.2021, 19:05  [ТС]
vxg, отлично. Спасибо, большое. Как раз то,что мне нужно было узнать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2021, 19:05
Помогаю со студенческими работами здесь

Создание уникального id для системы комментариев
Добрый день, я новичок и так получилось, что мне в наследие достался самописный сайт (раньше был опыт только на cms) с системой комментов,...

Создание раздела для установки системы.
как создать диск С,я форматировал свой жёский диск на другом компе теперь ставлю его к себе и устанавливаю винду7 там показывает что диск...

Создание системы, для запуска с CD диска
День добрый! Озадачился вопросом, но не знаю как подойти к решению проблемы. Надо сделать подобие тонкого клиента, для работы с...

Создание уникального id для системы комментариев
Добрый день, я новичок и так получилось, что мне в наследие достался самописный сайт (раньше был опыт только на cms) с системой комментов,...

Отключение функции активирования первого ближайшего объекта к левому верхнему углу
Здравствуйте, я новичок на данном форуме, такой вопрос: можно ли сделать так, чтобы при включении приложения, например, в ближайшем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Настройка записи справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru