Page 1 sur 2

[R] Dépiotage du fichier index.dat

Posté : jeu. 12 mars 2009 15:36
par GhostLine
Salut les gens !
Voici ma petite problématique : je dois récupérer sur des machines le fichiers index.dat (qui est présent, pour mémoire, dans le répertoire C:\Documents and Settings\{utilisateur}\Local Settings\Historique\) et le dépioter afin de sortir des stats sur les sites parcourus sur les machines en question (dans la version complète, il y a une expédition de mails contenant les résultats automatiquement planifiée une fois par semaine, mais pour ça, j'ai trouvé des exemples sur le forum, donc pas de souci).

Mon réel problème est plus lié au fichier lui-même : je suis pour ma part un fervent utilisateur des outils unix qui ont été porté sous Windows (Dieu bénisse les créateurs de GREP et de SED !), et je n'arrive par à tirer quoi que ce soit de propre de ce fichier, pour la bonne et simple raison qu'il est considéré comme un binaire ...

Donc si vous avez des idées, je suis carrément preneur, car je sèche grave là ! Merci d'avance :)

Edit pour précisions : ce fichier contient plein de caractères pas du tout normaux (d'où le fait qu'il soit considéré comme un binaire), qu'il faut autant que possible zigouiller ... et c'est là que je sèche :/ je cherche juste à récupérer les lignes qui contiennent la chaine "Visited:" .


Bon bon bon ...

J'ai quand même réussi à avancer un peu, mais au final, ma méthode n'est elle pas la mauvaise ? le fichier index.dat ne semble disponible qu'en mode déconnecté de l'utilisateur, donc je suis de la ...

Une idée pour obtenir ces infos ?


Décidément, j'en raconte des âneries :) si vous testez ça chez vous, après avoir préalablement créé le fichier test2.txt sur c:\ , vous allez comprendre pourquoi des gens se sont inquiété que ce fichier puisse être un spyware !

Du coup, je veux quand même bien un coup de main pour la mise en forme (zigouillages des caractères jusqu'au @) et la création automatique du fichier texte.

Merci d'avance !
► Afficher le texte

Re: [..] Depiotage du fichier index.dat

Posté : jeu. 12 mars 2009 17:59
par ani
Salut, je ne dispose pas de ce fichier sur le compte et je ne vois pas trop à quoii sa ressemble.
j'ai juste testé avec l'index des cookies :o

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat", 0)
If $file = -1 Then
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
    Exit
EndIf

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line,"Visited:") Then
        FileWriteLine("c:\test2.txt",$line)
    Endif
Wend
FileClose($file)
le $i = 0 ou $i=$i+1 ne serve pas, car dans la boucle, nous avons le error, ce qui signifie dans le cas ou on arrive en fin de fichier on sort de la boucle.

Re: [..] Depiotage du fichier index.dat

Posté : jeu. 12 mars 2009 18:28
par GhostLine
Quand j'ai testé, le fichier test2.txt ne s'est pas créé ; et j'ai créé $i pour passer à la ligne suivante dans ce fichier (disons que je suis méfiant :)).

Je mettrai un tronçon de ce fichier demain ici.

Edit : ah oué, marrant ... ça fonctionne au boulot, où il y a des CR entre chaque ligne, mais pas sur mon PC perso (le fichier ne contient, de facto, pas de retour à la ligne). Ici, les lignes commencent par le nom d'utilisateur ...

Il suffit de passer par une commande MS DOS pour accéder à ce fichier (qui est complètement invisible via l'explorateur).

Re: [..] Depiotage du fichier index.dat

Posté : jeu. 12 mars 2009 18:55
par ani
Si le fichier ne se crée pas, c'était juste du au stringinstr avec le paramètre 1, (case sensitive)

La plupart des fichiers de ce type sont tous en cache, mais franchement je ne dispose pas de ce fichier dans le dossier history.IE5 en tout cas pas dans la session que j'utilise.
Pour afficher ces dossier ou fichier il suffit juste de cocher la case dans l'option du dossier.
Si je ne dispose pas de ce fichier il se peut que çà soit juste un parametre décoché ou au niveau du regedit ?

l'index analyse bon petit projet :)

Re: [..] Depiotage du fichier index.dat

Posté : ven. 13 mars 2009 09:48
par GhostLine
En fait, je viens de me rendre compte qu'à cause des caractères spéciaux, je ne peux même pas copier/coller un tronçon du fichier ici :/ faudrait que je le mette en ligne quelque part ...

Re: [..] Depiotage du fichier index.dat

Posté : ven. 13 mars 2009 10:49
par ani
tu peux l'ajouter en fichier joint ;)

Re: [..] Depiotage du fichier index.dat

Posté : ven. 13 mars 2009 10:55
par GhostLine
Suis je bête :) je n'ai pas l'habitude de voir ce genre de fonctionnalité sur des forums phpbb, je me suis fait feinter :)

Re: [..] Depiotage du fichier index.dat

Posté : ven. 13 mars 2009 12:15
par ani
hm j'avais pas lu en entier le topic :(

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat", 0)
If $file = -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
Exit
EndIf
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line,"visited:") Then
        $line = StringSplit($line,"@")
        FileWriteLine("c:\test2.txt",$line[2]) 
     endif
Wend

FileClose($file)
On découpe la chaine en deux,$line = StringSplit($line,"@")
On récupere ce qui se trouve a droite du caractère @ (la deuxieme partie) FileWriteLine("c:\test2.txt",$line[2])

Je vais tester avec ton fichier, et le retirer de ton post ;)
Ou bien au lieu de splitter la chaine en deux, on pourrait utiliser une expression régulière (hélas, je me souvient plus trop de comment ...)

Code : Tout sélectionner

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line,"visited:") Then
       FileWriteLine("c:\test2.txt",StringRegExReplace($line,".*@","")) 
     endif
Wend
y a surement mieux dans le regex, faut que je relise la documentation en long en large... :(

Re: [..] Depiotage du fichier index.dat

Posté : ven. 13 mars 2009 14:22
par GhostLine
Là, ce me dépasse :) mais merci de ton aide efficace en tout cas !

Re: [..] Depiotage du fichier index.dat

Posté : sam. 14 mars 2009 13:01
par ani
Si quelqu'un a une tite idée sur l'expression régulière a utiliser pour capturer le premier arobase
Pourquoi ? car dans une des cmd utilisé par microsoft pour le fichier.chm il utilise @
mk:@MSITStore:

les liens de ce fichier index.dat (Pour History) sont de la forme suivant visited:{username}@{cmd}

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat", 0)
If $file = -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
Exit
EndIf
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$RegEx = StringRegExpReplace($line,".*\@","")
If @extended = 1 Then FileWriteLine("c:\test2.txt",$RegEx)
FileClose($file)
çà sera plus simple de matché sur l'arobase, pourquoi ?Ca fonctionnera sur tout fichier index.dat (me semble) :P

merci et bonne continuation ;)

Re: [..] Depiotage du fichier index.dat

Posté : lun. 16 mars 2009 14:42
par GhostLine
Bon, pas de nouveautés au niveau du code, mais de bonnes clefs de compréhension sur la façon dont fonctionne l'historique de IE ; ça m'a pris une bonne heure de taf, enjoy :)

Voici ce que j'obtiens ce jour (c'est important) en faisant, dans une fenêtre MS DOS, la commande
dir index.dat /s
(en étant dans le repertoire C:\DOCUMENT AND SETTINGS\nom_utilisateur\LOCAL SETTINGS\)
► Afficher le texte
Ces répertoires et fichiers sont invisibles (mais pas cachés, un dir /ah ne les révèle pas), mais on peut y accéder via la fenêtre DOS.

La façon dont cela fonctionne est finalement très simple : chaque répertoire contient une tranche de temps donnée (une semaine à chaque fois), comme on peut le visualiser dans l'historique d'IE.
Chaque répertoire porte le nom de sa tranche de temps, et contient un fichier .DAT contenant l'historique de navigation. Le fichier DAT en \HISTOR~1\History.IE5 doit probablement contenir la compilation des autres fichiers en un seul bloc.

Voici pour les explications. Donc l'idée serait d'accéder à ces répertoires via un batch (vu qu'il est impossible d'utiliser le navigateur pour accéder à ces emplacements, je viens de vérifier), en prenant bien garde de conserver les noms des répertoires, qui permettent de facto de conserver une chronologie, et de les recopier dans un endroit plus accessible.

Je vais zieuter de mon coté, mais j'ai peur que mes connaissances soient définitivement trop short :)

edit : ce topic en référence pour le positionnement des fichiers DAT.

Re: [..] Depiotage du fichier index.dat

Posté : lun. 16 mars 2009 15:04
par ani
ok :)
Sinon avec le regular expressions j'y suis pas arrivé avec les maigres connaissancent dont je dispose, surtout avec des liens du genre Visited:username@mk:@MSITStore:C:\
il découpé au deuxieme arobase :(

Sinon Voici un code fonctionnel ;)

Code : Tout sélectionner

$file = FileOpen(@UserProfileDir&"\Local Settings\Historique\History.IE5\index.dat",0)
If $file = -1 Then
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
    Exit
EndIf
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If (stringinstr($line,":") And stringinstr($line,"@")) <> 0 Then    
        $split = stringsplit($line,"@")
        FileWriteLine("c:\test2.txt",StringReplace($line,$split[1]&"@",""))
    EndIf
Wend
FileClose($file)
RunWait("write c:\test2.txt")

Code : Tout sélectionner

If (stringinstr($line,":") And stringinstr($line,"@")) <> 0 Then
Si la chaine contiend : ou @ est que c'est different de 0 alors

Code : Tout sélectionner

$split = stringsplit($line,"@")
On découpe la chaine qui contiend @

on obtiend un tableau split[0] = 2 element
split[1] = Visited:{username}
split[2] = L'url

Code : Tout sélectionner

FileWriteLine("c:\test2.txt",StringReplace($line,$split[1]&"@",""))
On écrit dans le fichier test2.tx les données trouvée et on remplace la chaine par le premier élèment (Visited:username) avec l'arobase

est on obtiend tout :) même les mk:@MSITStore:C:\

La chaine = ligne

la je suis sur une petite idée de projet l'index analyser :)
+> relève tout les index.dat et pour chaque index y a une analyse spécifique ;)
je posterai dès qu'il est OK :)

merci pour ton post :)

Re: [..] Depiotage du fichier index.dat

Posté : lun. 16 mars 2009 15:17
par GhostLine
Avec plaisir ! (comme on dit par ici :))

Edit : du coup, tu as réussi à trouver ces fichiers sur ta bécane ?

Re: [..] Depiotage du fichier index.dat

Posté : mar. 17 mars 2009 13:45
par ani
du coup, tu as réussi à trouver ces fichiers sur ta bécane ?
oui et non, j'ai bien pour cookies/ie/userdata mais pas pour l'historique :(
je teste sur une autre machine qui dispose de tout les fichiers même les MSHist ;)
J'ai remarqu" qu'avec le code proposé plus haut, y avait une ligne avec des caractère bizarre...
et toi ?

Pour la cmd sous ms-dos j'aurai plutôt indiqué le switch /B avec le /S
=> dir /B /S index.dat > index.txt

on obtiend les liens, on pourrait lire le fichier de sortie ligne par ligne(celui-ci n'est pas obligatoire, y a d'autre possibilité du genre (sans el fichier de sortie) si un fichier index.dat et trouvé on l'analyse)

je vais lire la documentation sur l' index.dat, me semble qu'on peut obtenir la date/le nmbre de fois que l'url fut visité ect non ?

Re: [..] Depiotage du fichier index.dat

Posté : mar. 17 mars 2009 13:53
par GhostLine
Je n'ai fait que déduire les informations que j'ai donné :) je ne sais pas si il existe un fichier de définition de la structure de ces fichiers.

Re: [..] Depiotage du fichier index.dat

Posté : mar. 17 mars 2009 14:43
par ani
Dommage que les fonctions ne sont pas toutes crée sous autoit ...
http://msdn.microsoft.com/en-us/library/aa384026(VS.85).aspx

j'aurai encore apprit quelquechose :P
vais essayer traduire c'est fonctions si pas je demanderai sur le fofo anglais (plus simple ^^" ) :P

Re: [..] Depiotage du fichier index.dat

Posté : mar. 17 mars 2009 20:34
par Tlem
A première vue, cela fait partie de la dll Windows Wininet.dll.
Donc l'appel à la dll sur les fonctions en question devrait apporter la solution au problème.

De tête il y à des exemples sur le forum Anglais sur l'appel à Wininet.dll. :wink:

Re: [..] Depiotage du fichier index.dat

Posté : mer. 18 mars 2009 09:46
par ani
Pas eu besoin de poser la question :), mais j'avais pas fait de recherche sur le forum :( voilàvoilà :P
UDF WININET
POST

çà servira pour la suite ;)

bein la dessus je part dormir :o

Re: [..] Depiotage du fichier index.dat

Posté : mer. 18 mars 2009 09:59
par GhostLine
Baaaah ... bonne nuit alors :D et merci !

Edit : Je viens d'aller voir le topic, c'est ENORME !! :shock:

Re: [..] Depiotage du fichier index.dat

Posté : mer. 18 mars 2009 10:06
par ani
de rien ;)
avant de partir rejoindre morphé, j'essaie de réaliser un exemple qui permettra de lister le contenu de l'index.dat, mais c'est pas gagné j'ai les oeil qui pique ^^'

sinon avec le dernier code dont j'ai posté aurais tu des caractère indessirable ?
j'ai testé sur une machine et j'ai une ligne avec 5 caractère (dommagee que je trouve pas cette foutu expression regulière :( )