PDA

Visualizza la versione completa : [C++] Come interrogare un "timer server" per ottenere la data?


IlViandante2960
27-03-2007, 19:52
Salve, vi espongo il mio problema.

Ho un'applicazioe in VC++ 6.0. Ho la necessità d'interrogare un timer server, come per esempio time.microsoft.com o altri similari, così da ottenere la data corrente (gg-mm-yyyy).

Vorrei utilizzare i socket. Qualcuno ha già risolto un problema simile o può fornirmi un link per qualche sito che ha del codice esemplificativo.
Quali sono le istruzioni che mi permetono di ottenere dal server la data?

Non ditemi di prendere la data del sistema dove gira l'applicazione perchè a me serve una data certa che non può essere modificata dall'utente.

Grazie

Habanero
27-03-2007, 21:59
devi studiardi il protocollo NTP o SNTP...
qui trovi un po' di info:

http://toi.iriti.cnr.it/it/ntp.html
http://en.wikipedia.org/wiki/Network_Time_Protocol
ftp://ftp.rfc-editor.org/in-notes/rfc1305.txt
ftp://ftp.rfc-editor.org/in-notes/rfc1769.txt

IlViandante2960
28-03-2007, 10:40
Innanzi tutto grazie per la risposta... Ho dato un'occhiata ai link che mi hai proposto...

La mia esigenza è molto più semplice a me serve solo la data: giorno, mese, anno....
Ho scritto "timer server" ma potrebbe essere anche la data presa dal server aziendale.

Mi spiego: l'applicazione sarà venduta. Bene dal pc del cliente deve potersi collegare ad un server e da questi ottenere la data.
Quindi mi serve del banale codice che mi faccia vedere come dall'interni di un'aplicazione Vc++ 6.0 ci si collega ad un server per ottenere la data....

Lo so che nella programmazione anche le cose più apparentemente banali richiedono studio, se tu hai dei link in proposito mi faresti cosa graditissima...

:ciauz:

oregon
28-03-2007, 11:24
Una cosa e' usare i protocolli standard che ti sono stati suggeriti (NTP in particolare), altra cosa e' avere la data da un qualsiasi server tramite un protocollo client-server "custom" che chiunque puo' inventarsi ma che implica la scrittura e l'installazione di una parte server del software.

Un time server (non timer server ...) oltre ad usare un protocollo standard e' anche "affidabile" perche' preleva la data e il tempo da una fonte sicura e precisa (riferimento atomico, ecc ...).

IlViandante2960
28-03-2007, 12:02
Grazie per l'attenzione, scusa se uso ancora della tua cortesia....
Si avrò usato termini impropi. Non mi sono mai occupato di problematiche relative alla rete.

Il problema che mi è stato posto è quello di modificare il sistema di protezione del software che vendiamo. Creare un sistema di protezione temporale. Per evitare che l'utente modifichi la data del proprio sistema mi è stato suggerito d'interrogare un server e da questi ottenere
la data.

Ora le modalità con le quali eseguire l'interrogazione è il problema che sto affrontando.
Per me anche interrogare il server della nostra azienda andrebbe benissimo...

Forse molto ingenuamente ho pensato che ci fosse una funzione o sequenza d'instruzioni che permettono di ottenere la data.... O non è così?
Ora che ti ho esposto più compiutamente la problematica se riesci a darmi qualche dritta te ne sarò grato...

Ciao

oregon
28-03-2007, 12:23
Ora la cosa e' un po' più chiara ...

Un paio di considerazioni iniziali ...

Un sistema di protezione simile implica che il software debba avere sempre disponibile una connessione internet e non sempre e' cosi'. I problemi che ne potrebbero derivare, non sono trascurabili ... (immagina che si installi il software che si e' regolarmente acquistato, su un sistema non collegato ad internet ...).

Anche ammesso che venga fornita la data da un server, se cio' non avviene su un canale criptato (o almeno, con un sistema che non mostri in chiaro l'informazione), e' facilmente sniffabile ed aggirabile.

Fatte queste premesse, non esiste una "sequenza di istruzioni" che si occupi di fare quello che chiedi. Puoi installare un piccolo programma lato server che risponda ad un determinato IP su porta 80 e invii la data criptata a richiesta del client. Per criptare l'informazione puoi scegliere un qualsiasi algoritmo (standard o personale, secondo il grado di sicurezza che vuoi ottenere ...). La scelta della porta 80 e' determinata dal fatto che molte aziende non permettono ai client di uscire su internet su porte non standard per motivi di sicurezza. Sicuramente l'uso della 80 e' consentito (per la navigazione web) e tutto dovrebbe funzionare.

alka
28-03-2007, 13:07
Originariamente inviato da IlViandante2960
Ho un'applicazioe in VC++ 6.0.
Indica il linguaggio anche nel titolo in futuro, come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

IlViandante2960
28-03-2007, 13:18
Capito.... In effetti guardando in rete pare dovrei utilizzare i socket. Il metodo forse più immediato e semplice...

Un socket server che invia la data su richiesta. Le problematiche che mi evidenzi non si pongono nel senso che il software sarà venduto solo a chi ha una connessione di rete attiva (almeno evito questo)...

Forse ci saranno problemi se per caso due o più socket client fanno nello stesso tempo la medesima richiesta, il socket server dovrebbe essere in grado di gestire tale situazione... Vabbè per ora mi bastano i problemi che ho...

Sei stato esauriente ed utile. Magari se avrò bisogno di qualche ulteriore dritta spero di poterti consultare ancora... Grazie...

:ciauz:

oregon
28-03-2007, 13:30
Sì ... puoi realizzare tutto con i socket.

Per le richieste multiple non dovresti avere problemi ... in realta' il programma lato server puo' essere (deve essere) scritto in modo da accettare piu' connessioni. Non e' difficile.

A risentirci.

MItaly
28-03-2007, 16:02
Ma non sarebbe più facile impedire all'utente di modificare la data e l'ora usando delle impostazioni più restrittive sulle varie macchine, ad esempio - su Windows - usando le policy di gruppo per impedire agli utenti di cambiare l'ora?

Loading