PDA

View Full Version : visualizzatore eventi e login


vaka_85
15-11-2006, 10:44
allora, non so se è la sezione giusta... xò forse si xkè qualke riga di codice bisognerà scriverla...
allora io ho bisogno di sapere, attraverso il visualizzatore eventi, o qualke altro tool di sistema ke fa la stessa cosa, quanti e quali utenti hanno fatto il login su un pc.. come posso fare? grazie

cionci
15-11-2006, 18:45
La prima soluzione che mi viene in mente è scrivere un Gina (:D)...
Probabilmente ci sarà qualcosa di più semplice, ma non mi viene in mente altro...

http://www.codeproject.com/useritems/GINA_SPY.asp

Master FO
15-11-2006, 20:15
se sei su un sistema linux basta che ti logghi come root e digiti il comando "last".
và a leggere un file di log che credo si chiami /var/log/last.log

vaka_85
15-11-2006, 23:25
non sono su linux :(

cmq in quel link su gina non sembra esserci quello ke mi serve...potresti spiegarmi? grazie

cionci
16-11-2006, 01:38
Gina è una DLL che gestisce il login. In questo modo puoi salvarti gli username degli utenti che si loggano (praticamente viene fatto lo stesso su quell'esempio).

vaka_85
16-11-2006, 09:45
ok, provo a darci un'occhiata x bene, poi t faccio sapere. se intanto qualcuno conosce altri modi dica pure ;)

andbin
16-11-2006, 11:23
Visto che non ho mai usato le API del Event Logging, ho voluto provare a scrivere un semplice programmino per leggere gli eventi registrati nel Registro di protezione.

Se può essere utile, ecco il sorgente:
#define STRICT
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <time.h>

#define EVLOGREC_BUFSIZE 2048


int main (int argc, char *argv[])
{
HANDLE hLog;
BYTE bBuffer[EVLOGREC_BUFSIZE];
EVENTLOGRECORD *pelr;
DWORD dwRead, dwNeed;
time_t t;
CHAR szTime[64];
WORD wIdx;
PCHAR pStr;

pelr = (EVENTLOGRECORD*) bBuffer;

hLog = OpenEventLog (NULL, "Security");

if (hLog != NULL)
{
while (ReadEventLog (hLog, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ,
0, pelr, EVLOGREC_BUFSIZE, &dwRead, &dwNeed))
{
while (dwRead > 0)
{
t = (time_t) pelr->TimeGenerated;

strcpy (szTime, ctime (&t));

if ((pStr = strchr (szTime, '\n')) != NULL)
*pStr = '\0';

/*-- Stampa data/ora --*/
printf ("%s ", szTime);

/*-- Stampa tipo evento --*/
switch (pelr->EventType)
{
case EVENTLOG_ERROR_TYPE:
printf ("Error ");
break;
case EVENTLOG_WARNING_TYPE:
printf ("Warning ");
break;
case EVENTLOG_INFORMATION_TYPE:
printf ("Information ");
break;
case EVENTLOG_AUDIT_SUCCESS:
printf ("Audit Success ");
break;
case EVENTLOG_AUDIT_FAILURE:
printf ("Audit Failure ");
break;
}

/*-- Stampa stringhe --*/
pStr = (PCHAR) pelr + pelr->StringOffset;

for (wIdx = 0; wIdx < pelr->NumStrings; wIdx++)
{
if (wIdx > 0)
printf (" ");

printf ("\"%s\"", pStr);
pStr += strlen (pStr)+1;
}

printf ("\n");

dwRead -= pelr->Length;
pelr = (EVENTLOGRECORD*) ((LPBYTE) pelr + pelr->Length);
}

pelr = (EVENTLOGRECORD*) bBuffer;
}

CloseEventLog (hLog);
}
else
printf ("Error %lu\n", GetLastError ());

return 0;
}
Nota: si potrebbero stampare anche altre informazioni. Non mi è ancora chiarissimo al 100% cosa c'è nel record. :p

vaka_85
16-11-2006, 23:13
appena possibile provo poi t faccio sapere! grazie mille!
c rivediamo anke qui eh! :D

vaka_85
21-11-2006, 13:48
l'ho provato... ma nn stampa niente! :confused: :mbe:

andbin
21-11-2006, 14:11
l'ho provato... ma nn stampa niente! :confused: :mbe:Sono raccomandazioni banali, lo so, ma ... l'hai fatto girare come "Administrator"??? Hai qualcosa nel "Registro di protezione"??

Se lo lanci non come amministratore dovrebbe indicare Error 1314 (cioè ERROR_PRIVILEGE_NOT_HELD).

vaka_85
21-11-2006, 14:20
non mi dava quell'errore xò nn ero admin. ora ho provato con admin e va, ma stampa milioni di informazioni...

a me interessa semplicemente sapere quanti utenti hanno effettuato l'accesso fino a quel momento... e poi magari svuotare il registro, ma questo viene dopo...

andbin
21-11-2006, 14:24
a me interessa semplicemente sapere quanti utenti hanno effettuato l'accesso fino a quel momento... e poi magari svuotare il registro, ma questo viene dopo...Beh, io ho fatto solo una stampa dei record e solo di alcune informazioni. Nel record ci sono diverse altre informazioni. C'è sicuramente da fare dei filtri per quello che vuoi fare tu ma bisognerebbe capire meglio quali sono i campi e i valori che servono.

vaka_85
21-11-2006, 23:00
ho scoperto ke l'id x l'evento "login" è il 528... quindi suppongo, e magari dico una cavolata, ke ogni volta ke il tuo prog vede sto numero, incrementi un contatore, ke poi viene scritto in un file... naturalmente non ne ho idea se sia fattibile oppure no :rolleyes:

vaka_85
22-11-2006, 11:32
qualcuno mi aiuta? grazie :)

cionci
22-11-2006, 11:33
vaka_85: avevi già la soluzione pronta nel sito che ti avevo linkato ;)
Bastava fare qualche modifica e compilare il tutto :)

Edit: aspetta ho letto che sembra non funzionare su XP

vaka_85
22-11-2006, 12:06
già... :(

vaka_85
23-11-2006, 11:04
andbin aiutami tu! :)

andbin
23-11-2006, 12:24
andbin aiutami tu! :)Allora diciamo questo: ho fatto una prova con il sorgente che ho postato. Gli ho fatto solo una modifica affinché stampasse anche il 'EventID'.

Ecco un esempio di cosa mi stampa:
Thu Nov 23 09:54:07 2006 681 Audit Failure "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" "dev" "WIN2000" "3221225578"
Thu Nov 23 09:54:19 2006 680 Audit Success "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" "administrator" "WIN2000"

Quindi bisogna innanzitutto verificare che la prima stringa sia "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0", poi verificare se il EventID è 680 (login con successo) o 681 (login fallito).
Poi la seconda stringa è il nome utente e la terza è il computer.

vaka_85
23-11-2006, 12:55
ti ringrazio.

ma sei sicuro dell'id dell'evento? io avevo fatto delle ricerche e ho anche provato e avevo visto ke era il 528 :confused: :confused: :confused:

andbin
23-11-2006, 13:02
ti ringrazio.

ma sei sicuro dell'id dell'evento? io avevo fatto delle ricerche e ho anche provato e avevo visto ke era il 528 :confused: :confused: :confused:Eh, lo so ... ho fatto delle ricerche in rete e ho trovato che parlavano anche di questo 528 e di altri ID.
Il fatto è che non sono esperto di queste cose e non ho trovato informazioni chiare e precise. Non vorrei che gli ID variassero da una versione di Windows all'altra o in base ad altre cose che non conosco.
Sul mio PC Win2000 prof. vedo solo ID 680/681.

vaka_85
23-11-2006, 13:07
beh si vede ke cambia col sistema operativo, cmq questo non penso sia un problema, nel laboratorio tutti i pc hanno winxp...

quindi, supponendo ke l'id sia X, potresti postare il codice ke hai fatto così provo a modificarlo? anke se non ci capisco quasi niente di c... :muro:

andbin
23-11-2006, 13:26
beh si vede ke cambia col sistema operativo, cmq questo non penso sia un problema, nel laboratorio tutti i pc hanno winxp...

quindi, supponendo ke l'id sia X, potresti postare il codice ke hai fatto così provo a modificarlo? anke se non ci capisco quasi niente di c... :muro:Il codice è praticamente quello del post #7. Qui da me gli ho solo aggiunto una banale printf per stampare l'EventID.

Ovvio, per quello che vuoi fare tu, ci sono diverse modifiche e cose in più da fare.

vaka_85
23-11-2006, 13:41
non è ke in un ritaglio di tempo potresti farlo? :p :D

vaka_85
25-11-2006, 16:11
up

uReverendo
26-11-2006, 13:50
allora, non so se è la sezione giusta... xò forse si xkè qualke riga di codice bisognerà scriverla...
allora io ho bisogno di sapere, attraverso il visualizzatore eventi, o qualke altro tool di sistema ke fa la stessa cosa, quanti e quali utenti hanno fatto il login su un pc.. come posso fare? grazie
Prova questa utility "NTLast 3.0" la trovi qui (http://www.foundstone.com/index.htm?subnav=resources/navigation.htm&subcontent=/resources/proddesc/ntlast.htm).