Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100

Как ограничить время действия программы по дате через интернет?

14.06.2010, 17:16. Показов 2517. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Создадим такие условия: если дата меньше или равна 30 июня 2010г, то напечатать "ok" (дальше сама прога). Если дата позже, то напечатать "Time is out" и стоп.
Почему инет? Потому что локальную дату на компе можно поменять в настройках. Если запрос делать строго через инет, то дату ни как не поменять. Если связи нет, то прога не будет работать. Если дата кончилась, то прогу уже не запустить никакими способами.
Подскажите, как реализовать, с чего начинать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2010, 17:16
Ответы с готовыми решениями:

Как ограничить повторные действия пользователя (через сессию, IP или еще как-то)?
Разрабатываю веб-сервис, который будет предоставлять платные услуги. Т.к. детали раскрыть нет возможности, то условно будем считать что...

Как ограничить время выполнения программы?
Добрый день! Задали написать программу, следующего содержания: "Для натурального числа сумма знакопеременного натурального ряда до...

Как ограничить время выполнения программы?
При выполнении макроса у меня получается(непонятно где) бесконечный цикл. Можно ли просто как-то ограничить выполнение программы по времени.

18
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
14.06.2010, 17:51
берешь библиотеку winsock создаешь сокет запрашиваешь страницу скажем дата и время выдираешь из нее дату, сравниваешь с нужной тебе и либо дальше, либо выход

Добавлено через 5 минут
вот есть прога которая парсит запрошенные данные по хттп и если надо обновляет в файле значение

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <iostream>
#include <clocale>
#include <conio.h>
#include <windows.h>
#include <fstream>
#include <io.h>
#include <iomanip>
#include <string.h>
#include <direct.h>
#include "winsock.h"
#include <cstring>
#include <process.h>
#pragma comment (lib,"Wsock32.lib")
using namespace std;
void sockerr(int er);
char buff[8192];
SOCKET s;
int actual_len2 = 0;
 
void main ()
{
setlocale(LC_ALL, "rus");
     WSADATA ws;
     int error;
     if (FAILED (WSAStartup (MAKEWORD( 1, 1 ), &ws) ) )//инициализация 
   {
       error = WSAGetLastError();
       cout<<"Инициализация "<<error<<endl;
       sockerr(error);
   }
     else
     {cout<<"Инициализация WinSock OK\n";}
    /*SOCKET s;*/
       if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, 0) ) )
   {
        error = WSAGetLastError();
        cout<<"Создание "<<error<<endl;
        sockerr(error);
   }
       else
       {cout<<"Создание сокета OK\n";}
        // Объявим переменную для хранения адреса 
   sockaddr_in asoc;
   ZeroMemory (&asoc, sizeof (asoc));
   // тип адреса (TCP/IP)
   asoc.sin_family = AF_INET;
   //адрес сервера. Т.к. TCP/IP представляет адреса в числовом виде, то для перевода 
   // адреса используем функцию inet_addr.
  int nmsg=-1;
//cout<<"Введите Ник: ";
 
//cin.getline(buff,sizeof(buff));
  strcpy(buff,"GET /pages/pravila-polzovanija/ HTTP/1.0\r\nHost: rgs.org.ua\r\nUser-Agent: Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.24 Version/10.53\r\nHost: 127.0.0.1:9999\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\nAccept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\nConnection: Keep-Alive\r\n\r\n\r\n\r\n\r\n");
   actual_len2=strlen(buff);
//while(strlen(buff)<1)
//{Sleep(50L);}
//strcat(buff," has connected\n");
   //cout<<"Введите ip-адрес: ";
   //cin>>ipadr;
   asoc.sin_addr.S_un.S_addr = inet_addr("188.120.232.216"); //(ipadr); 
   // Порт. Используем функцию htons для перевода номера порта из обычного в //TCP/IP представление.
   int dport;
    //cout<<"Введите порт: ";
   //cin>>dport;
   asoc.sin_port = htons (80);
   // Дальше выполняем соединение:
   if (SOCKET_ERROR == ( connect (s, (sockaddr *) &asoc, sizeof (asoc) ) ) )
   {
        error = WSAGetLastError();
        cout<<"Соединение "<<error<<endl;
        sockerr(error);
   }
   else
   {    cout<<"Соединение OK"<<endl;}
     if (SOCKET_ERROR == ( send (s, buff, actual_len2 , 0 ) ) )
   {
            error = WSAGetLastError();
            cout<<"Отправка "<<error<<endl;
            sockerr(error);
   }
     else{cout<<"Отправка ok"<<endl;}
//cout<<buff;
int actual_len = 0;
//int actual_len2 = 0;
 fd_set read_s; // Множество
   timeval time_out; // Таймаут
   int res=0;
actual_len2=strlen(buff);
do{
    FD_ZERO (&read_s);// Обнуляем мнодество
        FD_SET (s, &read_s);// Заносим в него наш сокет 
        time_out.tv_sec = 0;time_out.tv_usec = 50000; //Таймаут 0.5 секунды.
 
//if (SOCKET_ERROR == (res = select (0, &read_s, NULL, NULL, &time_out) ) ){} //{cout<<"Нет данных на отправку!\n";}
//else
 
 //if (SOCKET_ERROR == ( send (s, buff, actual_len2 , 0 ) ) )
 //  {
    //      error = WSAGetLastError();
    //      cout<<"Отправка "<<error<<endl;
    //      sockerr(error);
 //  }
Sleep(700);
 ZeroMemory (buff, sizeof (buff));
 do{    
    
 
     int max_packet_size=8192;
     if (SOCKET_ERROR == (res = select (0, &read_s, NULL, NULL, &time_out) ) ){} //{cout<<"Нет данных на прием!\n";}
     else
     if (res!=0)
 if (SOCKET_ERROR == (actual_len = recv (s,  buff, max_packet_size, 0 ) ) )
   {
        error = WSAGetLastError();
        cout<<"Получение "<<error<<endl;
        sockerr(error);
   }
 else
 {//buff[actual_len]='\0';
     cout<<"Get the page";//buff;
     for(int i=0; i<actual_len;i++)
     {
         char *pointer=&buff[i];
         if(strncmp(pointer,"value=", 6)==0)
         {cout<<endl<<"Key from site"<<endl;
         i+=6;
         pointer=&buff[i];
            char newc[106];
            strncpy(newc,pointer, 96);
            newc[96]='\0';
            cout<<endl<<newc<<endl<<endl;
            FILE *f;
            f=fopen("DrWU.ini", "r");
            if(f==NULL)
            {cout<<"There is no config file"<<endl;cout<<"Press any key...";_getch();exit(1);}
            int d=_fileno(f);
            int size=_filelength(d);
            char *newf=new char[size];
            int c=0;
            while(!feof(f))
            {newf[c]=fgetc(f);
            c++;}
            fclose(f);
            newf[c-1]='\0';
            //cout<<newf;_getch();
                for(int k=0; k<size;k++)
                {pointer=&newf[k];
                    if(strnicmp(pointer,"Key=", 4)==0)
                    {
                        k+=4;
                        cout<<"Key from file"<<endl<<endl;
                        pointer=&newf[k];
                        cout<<pointer<<endl<<endl;//_getch();
                        strncpy(pointer,newc,96);
                    }
                }
            //cout<<newf;_getch();
            f=fopen("DrWU.ini", "w");
            fputs(newf,f);
            fclose(f);cout<<"Update done. Press any key...";_getch();exit(1);
         }
 
     }
}
actual_len2=strlen(buff);
Sleep(1);
}while(1);//strlen(buff)!=0
}while(1);
// int max_packet_size=4096;
// if (SOCKET_ERROR == (actual_len = recv (s,  buff, max_packet_size, 0 ) ) )
//   {
//      error = WSAGetLastError();
//      cout<<"Получение "<<error<<endl;
//      sockerr(error);
//   }
//actual_len=strlen(buff);
//buff[actual_len]='\0';
//cout<<buff;
}
 
void sockerr(int er)
{
    char *DRF[]={"Interrupted function call.","File handle is not valid.","Permission denied.","Bad address.",
    "Bad address.", "Too many open files.", "Resource temporarily unavailable.", "Operation now in progress.",
    "Operation already in progress.","Socket operation on nonsocket.","Destination address required.","Message too long.",
    "Protocol wrong type for socket.", "Bad protocol option.", "Protocol not supported.","Socket type not supported.",
    "Operation not supported.", "Protocol family not supported.", "Address family not supported by protocol family.",
    "Address already in use.", "Cannot assign requested address.", "Network is down.", "Network is unreachable.",
    "Network dropped connection on reset.", "Software caused connection abort.", "Connection reset by peer.","No buffer space available.",
    "Socket is already connected.", "Socket is not connected.", "Cannot send after socket shutdown.", "Too many references.",
    "Connection timed out.", "Connection refused.", "Cannot translate name.", "Name too long.", "Host is down.", "No route to host.",
    "Directory not empty.", "Too many processes.", "User quota exceeded.", "Disk quota exceeded.", "Stale file handle reference.",
    "Stale file handle reference.", "Network subsystem is unavailable.", "Winsock.dll version out of range.", "Successful WSAStartup not yet performed.",
    "Graceful shutdown in progress.", "No more results.", "Call has been canceled.", "Procedure call table is invalid.",
    };
    int count=-1;
    for(int i=10004;i<er;i++)
    {
    if(i==10004||i==10009||i==10013||i==10014||i==10022||i==10024||i>=10035&&i<=10071||i>=10091&&i<=10093||i>=10101&&i<=10104)
    {count++;}
    }
    cout<<DRF[count]<<endl;
}
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
14.06.2010, 18:03  [ТС]
Ух ничего себе. По проще ни как? Я ж всё таки начинающий.
0
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
14.06.2010, 18:06
куда уж проще... хотя код ужасен... но для примера покатит...
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
14.06.2010, 20:19  [ТС]
У меня в трее хитрые часы, там можно проверить время через time.nist.gov
Можно как то этот сервер использовать?
Вообще, как можно для начала просто прочитать дату и напечатать её?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
14.06.2010, 20:23
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <time.h>
 
int main ()
{
  time_t rawtime;
 
  time ( &rawtime );
  printf ( "The current local time is: %s", ctime (&rawtime) );
 
  return 0;
}
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
14.06.2010, 20:51
Сомневаюсь в эффективности такого подхода. Да, программа будет защищена от "подкручивания" локальной даты. Но и только. Даже начинающий и неопытный взломщик без труда отучит её как от сравнения дат, так и от привычки лазить в Интернет.
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
14.06.2010, 22:09  [ТС]
Ну. Тогда подскажи, какой подход нужен, чтобы екзешник перестал выполнять нужный код?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
14.06.2010, 22:21
BadBaddak, двери и замки от сквозняков и честных людей...
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
15.06.2010, 19:41  [ТС]
Может быть сделать файл-ключ?
Ключ делается так - дата ограничения преобразовывается страшным никому не понятным образом, запихивается в кучу лишней информации (напр. получится файл 1кб)
Прога берёт ключ, преобразовывает его обратно по алгоритму в читаемый формат, и сравнивает эти два результата. Если дата из ключа меньше текущей даты, прога работать перестаёт.
Ну как обычно делают ограничение по дате (если предыдущий вариант слишком простой)? Или по времени которое программа отработала (например трое суток чистой работы)?
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.06.2010, 19:59
BadBaddak, Если собираешься защищать программу всерьёз, задумайся о покупной защите. Самодеятельностью в этой области результата не добьёшься. Или же выбирай другие способы заинтересовать пользователя в том, чтобы заплатить тебе причитающееся.
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
15.06.2010, 20:08  [ТС]
да какой всерьёз на форуме для начинающих?
Программа как раз не платная, а именно временная. Главная цель - поработать немного, а дальше хоть автостирание можно включать. Не стирание, тогда просто прекратить выполнение основной части.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
15.06.2010, 20:20
BadBaddak, при таком подходе проще организовать алгоритм, при котором программа тридцать раз (к примеру) запускается, а потом говорит "опаньки"... А чтобы взломщику труднее было, нужно не единичку к счётчику прибавлять и писать значение счётчика в ключ в реестре, а какой-нибудь синус угла 118 градусов умножать на количество запусков программы и вместе с кучей подобного рода нелепых чисел в какой-нибудь конфиговский файлик скидывать...
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.06.2010, 20:32
Обычно как раз с этих "опаньки" взлом-то и начинают. Находят сообщение, смотрят, какой участок кода его использует, смотрят, при каком условии...
В принципе, можно при выходе записывать в конфигурацию время запуска плюс время работы, а при старте сравнивать текущую дату с записанным значением. Если меньше - время отмотали назад, и никакой интернет для проверки не нужен.
0
15.06.2010, 20:47

Не по теме:

Цитата Сообщение от Nick Alte Посмотреть сообщение
... а при старте сравнивать текущую дату с записанным значением.
Но "опаньки" всё равно скажет... А дальше... Ну Вы в курсе. ;)

0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
15.06.2010, 22:15
Даже начинающий и неопытный взломщик без труда отучит её как от сравнения дат, так и от привычки лазить в Интернет.
Сломать можно все что угодно.
Вопрос сколько это будет стоить.
99.99% пользователей эта проверка времени остановит.
Надо защищаться от остальных 0.01% ?
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
16.06.2010, 12:43  [ТС]
Всё таки на чём остановиться?
Сравнение с локальной датой легко исправляется любым юзером в принципе (дата назад).
Сравнение с датой через инет наверное будет более выгодным решением (хотя уже подсказали что и такое можно обойти)
Скоро выложу начальный вариант. Потом поправить можно будет.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
16.06.2010, 19:20
odip, насчёт 99.99% - чересчур оптимистичная оценка. Думаю, не более 95%. Ну и не надо забывать, что даже один-единственный "остальной" преспокойно сможет выложить результаты взлома для всеобщего ознакомления.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
16.06.2010, 19:27
Цитата Сообщение от Nick Alte Посмотреть сообщение
один-единственный "остальной" преспокойно сможет выложить результаты взлома для всеобщего ознакомления.
Вот-вот... Мало того...
Цитата Сообщение от odip Посмотреть сообщение
99.99% пользователей эта проверка времени остановит.
Вопрос в том, сколько из них полезет в сеть ломалку искать, или саму программу уже сломанную... Если програмка действительно нужная и полезная, недели не пройдёт - на тех же торрентах крякнутую какой-нибудь доброхот выложит...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.06.2010, 19:27
Помогаю со студенческими работами здесь

Пропадает интернет через некоторое время после запуска программы для автоматизации действий в браузере
Здравствуйте. Трабл следующий - При запуске программы для многопотоковой автоматизации действий в браузере через некоторое время ложится...

Как открыть окно в новой вкладке через опр. время (по завершению действия)
Подскажите, пожалуйста, у меня по нажатию на кнопку выполняется php-скрипт, который формирует новый html-документ. Мне нужно этот документ...

Выборка по дате через определенное время
Всем привет. Никак не могу справится с решением. Есть запись у которой datetime 2017-12-06 06:00:07 (create_date) (как пример) ...

Как в Windows 7 ограничить пользователю права на определённые действия?
Доброго времени суток. Можете подсказать как ограничить пользователя согласно списку: сейчас имеем: локальная сеть, где гуляет...

Выполнение действия через заданное время.
У меня появилось 2 вопроса, буду благодарен за помощ... Вопрос 1. Засекаем реальное время ((((DateTime.Now.Hour * 60) +...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru