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
Code : Tout sélectionner
#Include <File.au3>
$i=0
$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:",1) Then
$i=$i+1
_FileWriteToLine("c:\test2.txt",$i, $line, 1)
endif
Wend
FileClose($file)
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
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)
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
Le volume dans le lecteur C n'a pas de nom.
Le num‚ro de s‚rie du volume est 3492-611E
R‚pertoire de C:\DOCUME~1\TOTORO\LOCALS~1\HISTOR~1\History.IE5
16/03/2009 13:35 212ÿ992 index.dat
1 fichier(s) 212ÿ992 octets
R‚pertoire de C:\DOCUME~1\TOTORO\LOCALS~1\HISTOR~1\History.IE5\MSHist012009022320090302
16/03/2009 09:56 49ÿ152 index.dat
1 fichier(s) 49ÿ152 octets
R‚pertoire de C:\DOCUME~1\TOTORO\LOCALS~1\HISTOR~1\History.IE5\MSHist012009030220090309
16/03/2009 09:56 65ÿ536 index.dat
1 fichier(s) 65ÿ536 octets
R‚pertoire de C:\DOCUME~1\TOTORO\LOCALS~1\HISTOR~1\History.IE5\MSHist012009030920090316
16/03/2009 09:56 65ÿ536 index.dat
1 fichier(s) 65ÿ536 octets
R‚pertoire de C:\DOCUME~1\TOTORO\LOCALS~1\HISTOR~1\History.IE5\MSHist012009031620090317
16/03/2009 09:56 49ÿ152 index.dat
1 fichier(s) 49ÿ152 octets
Total des fichiers list‚sÿ:
5 fichier(s) 442ÿ368 octets
0 R‚p(s) 125ÿ080ÿ899ÿ584 octets libres
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
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
vais essayer traduire c'est fonctions si pas je demanderai sur le fofo anglais (plus simple ^^" )

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.

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à
UDF WININET
POST
çà servira pour la suite
bein la dessus je part dormir

Re: [..] Depiotage du fichier index.dat
Posté : mer. 18 mars 2009 09:59
par GhostLine
Baaaah ... bonne nuit alors

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

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

)