bigbenno
Goto Top

Datei auslesen in andere Datei schreiben

Hallo Leutz!

Gibt es eine möglichkeit aus einer .txt Datei eine bestimmte Zeile auszulesen, von dieser eigentlich auch nicht alles und dies in einer andere .txt abzulegen?

Geht darum das ich aus unsere SMTP Server log die IP's haben möchte, welche versuchen uns als SMTP Server zu missbrauchen. Diese sollen dann in einer andere .txt geschrieben werden.

P.S. Ohne Java oder Linux oder php face-smile

Content-Key: 22141

Url: https://administrator.de/contentid/22141

Printed on: April 25, 2024 at 19:04 o'clock

Member: Biber
Biber Dec 22, 2005 at 12:00:11 (UTC)
Goto Top
Moin BigBenno,

da sehe ich nur Chancen, wenn ihr die entsprechenden Zeilen anhand eines Suchbegriffs auch identifizieren könnt.
Bevor ihr da nichts habt bzw. postet und auch die Art des Outputs nicht klar ist, lohnt sich IMHO das Anfangen nicht.
Gruß Biber
Member: BigBenno
BigBenno Dec 22, 2005 at 13:13:31 (UTC)
Goto Top
Wir haben einen Anhatspunkt:

Dec 22, 2005, 10:38:17 Session 1: HELO 212.94.244.14
Dec 22, 2005, 10:38:17 Session 1: 250 xxx.xxx.de Hello [192.168.150.247]
Dec 22, 2005, 10:38:18 Session 1: MAIL FROM: <zdsdbzse@pmail.com>
Dec 22, 2005, 10:38:18 Session 1: 250 2.1.0 zdsdbzse@pmail.com....Sender OK
Dec 22, 2005, 10:38:18 Session 1: RCPT TO: <popogigi1975@yahoo.com.tw>
Dec 22, 2005, 10:38:18 Session 1: Recipient address reject: popogigi1975@yahoo.com.tw

So sieht das log aus von dem SMTP Server. Ich müsste nach dem Wort "reject" suchen und dann 5 Zeilen drüber die IP auslesen. Diese dann in eine andere .txt schreiben
Member: Biber
Biber Dec 22, 2005 at 13:50:51 (UTC)
Goto Top
Na ja, BigBenno,
dann ist die Mimik doch relativ simpel:

- die Zeilen-Nummern aller Zeilen mit dem Suchbegriff "reject" ermitteln
- in einer Schleife die Zeilen mit den (Zeilen-Nummern minus 5) anfassen
- aus dieser Zeile jeweils die IP und welche Informationen auch immer (Datum?) in eine neue Log-Datei schreiben.

Done.

Jetzt musst Du Dir bloß noch überlegen, mit was Du es realisieren willst - mit einer Skript-Sprache, in C#, per Batch oder oder mit Excel-Makros... bei der Anforderung sind es ja in keinem Dialekt (außer COBOL) mehr als 30 Zeilen.
Du hast es ja relativ allgemein unter "Windows" gepostet. Soll das denn täglich als Dienst im Hintergrund laufen oder einmal im Monat über die gesammelten Logs laufen oder wie ist der Plan?
Gruß Biber
Member: BigBenno
BigBenno Dec 22, 2005 at 14:04:27 (UTC)
Goto Top
Ja das es so geht hab ich mir schon gedacht.
Jedoch wüsste ich auf anhieb keinen Code womit ich dies machen könnnte.
Es soll wenn möglich täglich ausgeführt werden. Wenn es eine Batch wäre ginge dies ja über den TaskPlaner.
Member: Biber
Biber Dec 22, 2005 at 17:52:39 (UTC)
Goto Top
Na ja, BigBenno,
ein fertiges Programm dafür kann ich Dir auch nicht bieten, aber eine kurze Beispiel-Skizze als Batch kann ich Dir posten.

::------snipp BBLogExtract.bat
@echo off & setlocal enableDelayedExpansion
:: Biberware 2005
Set "INlog=z:\Server.log" & set "LineLog=%temp%\line.Log"  
Set "Outlog=z:\BadIPs.log"  
goto SkipDoku1
/* **********
:: Eine "Kriterium"-INLog-Zeile mit Suchwert "reject" sieht so aus: 
:: Dec 22, 2005, 10:38:18 Session 1: Recipient address reject: spammail@fake.com.tw
:: ....Token1 %%a ist "[nn]", Tokens2 %%b ist "Dec 22"; Token3 %%c ist "2005" 
:: Geschrieben wird jetzt eine Liste mit den (Zeilennummern minus 5) in der Form:
Dec 22, 2005 [13]
Dec 22, 2005 [37]
Dec 22, 2005 [61]
Dec 22, 2005 [85]
*/
:SkipDoku1
@for /F "skip=2 delims=],[ tokens=1-3" %%a in ('find /n "reject" %INLog%') do (  
    Set /a Line=%%a-5 >nul
    echo %%b,%%c [!Line!] >>%LineLog%)
Set /A "Line=0"  
For /F "tokens=1-4,7,8* delims=],[ " %%a in (%INlog%) do (  
   Set /a "Line=!Line!+1"  
   Find "%%a %%b, %%c [!Line!]" %LineLog% >nul    
   If not Errorlevel 1 echo.%%a %%b %%c %%d %%f>>%Outlog% ) 
::------snipp BBLogExtract.bat   
.......so würde die Extrakt-Datei aussehen können ... aus der obigen Log-Datei alle IPs, die 5 Zeilen über den "reject" stehen.
(Datum und Zeit hab ich mit übernommen ... wenn nicht benötigt, dann eben nur Parameter %%f wegschreiben.)
Dec 22 2005 10:38:17 212.94.244.14
Dec 22 2005 10:38:17 212.94.244.13
Dec 22 2005 10:38:17 212.94.244.81
Dec 22 2005 10:38:17 212.94.244.27..........etc..

Das ist jetzt nach Deinen Vorgaben, also die Zeilen, die im Original-Log "HELO" enthalten.
Als Batch sind das, selbst mit Kommentaren ca. 25 runtergeschrotete Codezeilen - wenn Du das mit einer mächtigeren Skriptsprache umsetzt noch weniger.

HTH Biber
Member: BigBenno
BigBenno Dec 23, 2005 at 07:16:20 (UTC)
Goto Top
Vielen Dank erstmal!

Ich werde mich da heute mal dran setzen