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

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

14.06.2010, 17:16. Показов 2484. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru