2015-08-04 1 views
7

Je suis en train de déterminer si un utilisateur a téléchargé un fichier FTP en utilisant MS Log Parser 2.2MS Log Parser 2.2 Query Error

Je n'ai pas été en mesure d'obtenir l'analyseur requête SQL en cours, bien que je l'ai utilisé plusieurs requêtes échantillons .

l'eau vers le bas Parser Query ne fonctionne pas:

strSQL = "SELECT date,COUNT(*) AS downloads,c-ip " 
strSQL = strSQL & "FROM C:\temp\Log\*.log " 
strSQL = strSQL & "WHERE cs-method='RETR' " 
strSQL = strSQL & "GROUP BY date,c-ip " 

Erreur:

RecordSet cannot be used at this time [Unknown Error] 

Question:

Comment créer une requête:

- SELECT Date and Time of download 
- Where user = 'xxx' 
- WHERE RETR = is a download 
- WHERE Filename = u_ex150709.log or xxx 

Réponses dans C# sont également les bienvenus

Code de VB.net:

Dim rsLP As ILogRecordset = Nothing 
Dim rowLP As ILogRecord = Nothing 

Dim LogParser As LogQueryClassClass = Nothing 
Dim W3Clog As COMW3CInputContextClassClass = Nothing 

Dim UsedBW As Double = 0 
Dim Unitsprocessed As Integer 

Dim strSQL As String = Nothing 

LogParser = New LogQueryClassClass() 
W3Clog = New COMW3CInputContextClassClass() 

Try 

strSQL = "SELECT date,COUNT(*) AS downloads,c-ip " 
strSQL = strSQL & "FROM C:\temp\Log\*.log " 
strSQL = strSQL & "WHERE cs-method='RETR' " 
strSQL = strSQL & "GROUP BY date,c-ip " 

'run the query against W3C log 
rsLP = LogParser.Execute(strSQL, W3Clog) 

'Error occurs in the line below 
rowLP = rsLP.getRecord() 
+0

Pouvez-vous s'il vous plaît fournir les journaux d'échantillons? –

+0

Quelle est la valeur de 'rsLP.atEnd()' avant d'appeler la dernière ligne? –

Répondre

3

Just like you I've written tools that leverage LogParser, eg http://eventanalyser.appointmentsbook.com/

Bien en 2004 (en utilisant .Net 1.1) Je n'ai pas eu la avantage de téléchargement: https://visuallogparser.codeplex.com/

Vérifiez leur code source, obtenez votre requête Travailler dessus (VisualLogParser) et ensuite simplement le référencer dans votre projet et profiter de la bonté de la communauté open source.

Quant à votre question concernant sangsues FTP, voici l'article MSDN: http://blogs.msdn.com/b/robert_mcmurray/archive/2010/09/02/detecting-ftp-leeches-with-logparser.aspx

SELECT date,COUNT(*) AS downloads,c-ip,x-session 
FROM *.log 
WHERE cs-method='RETR' 
GROUP BY date,c-ip,x-session 
HAVING COUNT(*) > 100 

Une chose ne se démarquer au sujet de votre requête quand on regarde celui de j'ai créé une interface graphique pour créer de façon dynamique, vous re apostrophes manquantes dans le chemin du fichier:

strSQL = strSQL & "FROM C:\temp\Log\*.log " 

Essayez ceci:

strSQL = strSQL & "FROM 'C:\temp\Log\*.log' " 

(et utiliser un StringBuilder, pas concaténation de chaînes ... juste pour prendre l'habitude des bonnes pratiques)

Comme par:

enter image description here

If the quotes don't solve the problem first go, then try a single log file rather than the wildcard *.log to narrow down on the syntax error. LogParser isn't designed to be helpful at diagnosing problem queries, instead Gabriele Giuseppini designed it to be fast, very fast !