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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22141
Url: https://administrator.de/forum/datei-auslesen-in-andere-datei-schreiben-22141.html
Ausgedruckt am: 21.04.2025 um 12:04 Uhr
6 Kommentare
Neuester Kommentar
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
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
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.
.......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
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
(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