Jak dostat info. z index.dat? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak dostat info. z index.dat? – C / C++ – Fórum – Programujte.comJak dostat info. z index.dat? – C / C++ – Fórum – Programujte.com

 

machis0
Newbie
18. 1. 2007   #1
-
0
-

Mohl by mi nekdo prosim poradit jak mam nacist ze souboru index.dat adresy navstivenych stranek a cas navstiveni?
Zkousel jsem to tak ze jsem nasel string URL a pak jsem poskocil o 104 bytu a nechal jsem vypsat adresu viz. zdrojak nize.
Ale stim casem si nevim nejak rady, zkousel jsem to pomoci programu PASCO, ale nejak jsem nepochopil jak tam nacitaji ten soubor.

link na PASCO: http://odessa.cvs.sourceforge.net/odessa/pasco/src/pasco.c?view=markup
jinak tady je link na pdf, ktere popisuje strukturu index.dat: http://www.foundstone.com/pdf/wp_index_dat.pdf

Prosim poradte jak to mam udelat.

#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>

#define BUFSIZE 32

int main()
{

FILE *f;
int c,zacatek;
char szIndexPath[BUFSIZE];

f = fopen("C:\\Documents and Settings\\xxx\\Cookies\\index.dat","rb");

//
/* Soubor je oteveren */
//
if ( f <= 0 )
{
printf("ERROR - Soubor index.dat nejde otevrit!\n\n");
}
else;
printf("OK\n\n");

while((c = fgetc(f))!=EOF) {
if( c !='U' ) continue;
if( fgetc(f) != 'R' ) continue;
if( fgetc(f) != 'L' ) continue;

zacatek=SEEK_CUR ;
printf("%d\n", zacatek);

//URL
fseek(f, 0x68-0x3, zacatek);
fgets(szIndexPath, BUFSIZE, f);
printf("%s\n", szIndexPath);

}
return 0;
}

Nahlásit jako SPAM
IP: ...–
machis0
Newbie
20. 1. 2007   #2
-
0
-

PLSSSSSSSSSS poradte jak to mam udelat s tim casem

Nahlásit jako SPAM
IP: ...–
sn3d0
Věrný člen
20. 1. 2007   #3
-
0
-

No ked najdes URL, posunies sa o 8 bajtov(za tvojim CASEom je to uz len 5 bajtov) dalej a nacitas dalsich 8 bajtov (cas).Potom uz len pouzijes na to tuto funkciu time_t win_time_to_unix ktorej das ako argument pole tvojich nacitanych 8mich bajtov.To je last Modified TimeStamp.Ak nacitas dalsich 8 bajtov tak to je Last Accessed TimeStamp.




//fcia ktora prevracia poradie bajtov
unsigned int bah_to_i( char *val, int size ) {
int total;
int i;

total = 0;
for ( i=0; i < size; i++ ) {
total += ((unsigned char)val[i] << 8*i);
}

return total;
}

//funkcia ktora ti skovertuje tych 8 bajtov na cas
time_t win_time_to_unix( char *val ) {
unsigned long low, high;
double dbl;
time_t total;

char fourbytes[4];

fourbytes[0] = val[0];
fourbytes[1] = val[1];
fourbytes[2] = val[2];
fourbytes[3] = val[3];

low = bah_to_i( fourbytes, 4 );

fourbytes[0] = val[4];
fourbytes[1] = val[5];
fourbytes[2] = val[6];
fourbytes[3] = val[7];

high = bah_to_i( fourbytes, 4 );

dbl = ((double)high)*(pow(2,32));
dbl += (double)(low);

if ( dbl==0 ) {
return 0;
}

dbl *= 1.0e-7;
dbl -= 11644473600;
total = (double)dbl;
return total;
}


Dovod preco to takto treba konvertovat je v tom dokumente.Totizto to 64bitove cislo je pocet 100 nanosekund od 00:00 1 Januara 1601.Cas v Cecku (time_t) je zase pocet sekund od roku 00:00 1 Januara 1970. Cize s toho dostavas ten vstah(co ktora hodnota znamena je pekne napisane v tom dokumente):



time_t UnixTime = 10(na-7) * nacitana_hodnota + 11644473600


Inac neviem ci tento sposob je prave najlebsi takto hladat vyksyt 'URL' stringu a spoliehat sa na to.Skor by som si na tom dal zalezat a podla toho dokumentu by som si urobil parser toho index.dat.Je to podstatne viac roboty ale mozes sa spolahnut na data.Takto je to dost nespolahlive.

Nahlásit jako SPAM
IP: ...–
shutdown -h now
machis0
Newbie
21. 1. 2007   #4
-
0
-

To sn3d: Mohl by jsi mi jeste prosim poradit u funkce: ctime_r(); mi to pise ze neni deklarovany identifikator.
Jinak ten druhy zpusob by jsem rad vyzkousel, ale je problem v tom ze v programovani nejse moc zbehly (jak jsi urcite poznal :-) ), tak chci nejprve zprovoznit ten lehci zpusob a pak se zkusim vrhnoput na ten slozitejsi.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define BUFSIZE 32




/////////////////////////////////////////////////////////////////////////////////////////////////

//fcia ktora prevracia poradie bajtov
unsigned int bah_to_i( char *val, int size ) {
int total;
int i;

total = 0;
for ( i=0; i < size; i++ ) {
total += ((unsigned char)val[i] << 8*i);
}

return total;
}

//funkcia ktora ti skovertuje tych 8 bajtov na cas
time_t win_time_to_unix( char *val ) {
unsigned long low, high;
double dbl;
time_t total;

char fourbytes[4];

fourbytes[0] = val[0];
fourbytes[1] = val[1];
fourbytes[2] = val[2];
fourbytes[3] = val[3];

low = bah_to_i( fourbytes, 4 );

fourbytes[0] = val[4];
fourbytes[1] = val[5];
fourbytes[2] = val[6];
fourbytes[3] = val[7];

high = bah_to_i( fourbytes, 4 );

dbl = ((double)high)*(pow(2,32));
dbl += (double)(low);

if ( dbl==0 ) {
return 0;
}

dbl *= 1.0e-7;
dbl -= 11644473600;
total = (double)dbl;
return total;
}

// tisk
int printablestring( char *str ) {
int i;

i = 0;
while ( str[i] != '\0' ) {
if ( (unsigned char)str[i] < 32 || (unsigned char)str[i] > 127 ) {
str[i] = ' ';
}
i++;
}
return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{

FILE *f;
int c,zacatek,x;
char szIndexPath[BUFSIZE], cs[8];
time_t accesstime;
char ascaccesstime[26];

f = fopen("C:\\Documents and Settings\\xxx\\Cookies\\index.dat","rb");



// Soubor je oteveren
if ( f <= 0 )
{
printf("ERROR - Soubor index.dat nejde otevrit!\n\n");
}
else;
printf("OK\n\n");

while((c = fgetc(f))!=EOF) {
if( c !='U' ) continue;
if( fgetc(f) != 'R' ) continue;
if( fgetc(f) != 'L' ) continue;

zacatek=SEEK_CUR ;
printf("%d\n", zacatek);

//CAS
fseek(f, 13, zacatek);
x=bah_to_i( cs, 8 );
accesstime=win_time_to_unix(cs);
ctime_r( &accesstime, ascaccesstime );

if (accesstime == 0) {
ascaccesstime[0] = '\0';
}
printablestring( ascaccesstime );
ascaccesstime[0] = '\0';

//URL
fseek(f, 88, zacatek);
fgets(szIndexPath, BUFSIZE, f);
printf("%s\n", szIndexPath);


}
return 0;




}

Nahlásit jako SPAM
IP: ...–
sn3d0
Věrný člen
21. 1. 2007   #5
-
0
-

Niesom si isty ale myslim ze M$ nepozna fciu ctime_r.V M$ sa time_t musi skonvertovat na tm strukturu pomocou fcie localtime a potom mozes z nej ziskat text pomocou fcie asctime.



tm* temp;
temp = localtime(&accesstime);
printf( "Time is: %s", asctime(temp) );


Doporucujem :
localtime() a tm struktura -http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_localtime.asp
asctime() - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_asctime.2c_._wasctime.asp

Nahlásit jako SPAM
IP: ...–
shutdown -h now
machis0
Newbie
22. 1. 2007   #6
-
0
-

To sn3d:

Tak tu chybovou hlasku mi to uz nepise, ale spadne to u printf( "Time is: %s", asctime(temp) );, vypada to ze v accesstime je neco co tam nema byt,
asi spatne volam fci bah_to_i(), nebo win_time_to_unix() mohl by jsi prosimte poradit co delam zpatne.



int main()
{

FILE *f;
int c,zacatek,x;
char szIndexPath[BUFSIZE], cs[8];
time_t accesstime;
struct tm *temp;

f = fopen("C:\\Documents and Settings\\xxx\\Cookies\\index.dat","rb");



// Soubor je oteveren
if ( f <= 0 )
{
printf("ERROR - Soubor index.dat nejde otevrit!\n\n");
}
else;
printf("OK\n\n");

while((c = fgetc(f))!=EOF) {
if( c !='U' ) continue;
if( fgetc(f) != 'R' ) continue;
if( fgetc(f) != 'L' ) continue;

zacatek=SEEK_CUR ;
printf("%d\n", zacatek);

//CAS
fseek(f, 13, zacatek);

x=bah_to_i( cs, 8 );
accesstime=win_time_to_unix(cs);

temp = localtime(&accesstime);
printf( "Time is: %s", asctime(temp) );


//URL
fseek(f,88, zacatek);
fgets(szIndexPath, BUFSIZE, f);
printf("%s\n", szIndexPath);


}
return 0;




}

Nahlásit jako SPAM
IP: ...–
sn3d0
Věrný člen
22. 1. 2007   #7
-
0
-

No na prvy pohlad:



...
x=bah_to_i( cs, 8 ); //toto ej tu na co?Zbytocne, vyhodit
accesstime=win_time_to_unix(cs); //kde nacitavas data do premennej cs??
...


Inac ked programujes taketo veci tak pouzivaj debuger a krokuj si cely proces.Pochopis skor co to roby a najdes tak skor chybu.

Nahlásit jako SPAM
IP: ...–
shutdown -h now
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 41 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý