Es gibt eine Protokolldatei /var/log/syslog
mit der Ausgabe von IP-Adressen wie z SRC=10.158.0.1
.
Ich möchte aus dieser Datei jede gedruckte Adresse scannen SRC= ...
und dann mit abfragen whois (SRC= ...)
.
Diese Abfrage sollte überwacht werden.
Mein Versuch ist falsch und sieht in einem Bash-Skript so aus:
#/bin/bash
while [ 1 ]
do
grep ‘SRC=ip-address’ /var/log/syslog >> /home/$user/topsecret001/pitbull001.txt;
whois ‘SRC=ip-address’ >> /home/$user/topsecret001/pitbull002.txt;
done
Kann jemand mit einem Trick helfen? Wie soll ich die IP-Adresse definieren und wie kann ich den Befehl whois
mit dieser IP-Adresse verwenden?
Die Ausgabe von / var / log / syslog sieht hier wie folgt aus:
http://paste.ubuntu.com/5859332/
Die Ausgabe von / var / log / syslog sieht folgendermaßen aus - wenn eine kleine Warnung vorliegt (wie heute):
http://paste.ubuntu.com/5862958/
Es wäre auch eine Idee, eine whois-Abfrage nur durchzuführen, wenn in der Zeile des scrollenden Syslogs ein "ungültiger Status" angezeigt wird.
Vielen Dank für Ihre Beiträge. Ich habe etwas durch Ihre Codes gelernt. Oft sehen die Lösungen einfacher aus als hier gedacht - weil ich dachte, es wäre schwieriger. Ich denke mit dem jüngsten Beitrag von Enzotib ist diese Frage dann schon jetzt gelöst.
siehe neuen Kommentar von heute (22. Juni 2016) zum 16.04:
Weil dieses Bash-Skript für Zeiten von IPv4 war - muss dann /etc/sysctl.conf nicht kommentiert werden, um IPv4 zu aktivieren? - Dann würde dieses Skript ausgeführt? Ansonsten gibt es keine whois-Ausgabe mehr wie zuvor. Habe dies mit den Kommentaren 28 und 33 von /etc/sysctl.conf überprüft - dann würde dieses Bash-Skript in diesem Thread funktionieren, aber nur sehr wenige Ausgaben liefern, da der Anbieter die Firewall aktiviert hat (wegen No-Spy-Act?). Auf diese Weise wird dieser Thread durch diesen Zusatz vom 22. Juni 2016 für den 16.04. Aktualisiert
quelle
/var/log/syslog
Datei auf paste.ubuntu.com veröffentlichen und wir geben den Link bitte. Das liegt daran, dass ich nichts VergleichbaresSRC= ...
in meiner/var/log/syslog
Datei habe.Antworten:
Noch eine andere Lösung:
Wenn Sie nur Zeilen auswählen möchten,
syslog
die die Zeichenfolge enthaltenINVALID STATE
, kann der obige Code wie folgt geändert werdenquelle
whois $IP
, wenn dieselbe IP 10 Mal in / var / log / syslog erscheint (wie hier: paste.ubuntu.com/5859332 ). Höchstwahrscheinlich wird sich das Ergebnis vonwhois one_specific_ip
in naher Zukunft nicht ändern.Sie können einen
sed
Befehl verwenden, um alle IP-Adressen der IP-Adressen aus der Datei zu extrahieren und dann für jede Übereinstimmungxargs
auszuführenwhois
:Der
s/^.*SRC=\([0-9.]*\).*$/\1/
Befehl ersetzt Zeilen, die SRC = xxxx enthalten, nur durch die IP-Adresse.Die Befehle 't; d' überspringen nicht übereinstimmende Zeilen (wodurch ein separater
grep
Befehl vermieden wird ).Der
xargs
Befehl wirdwhois
für jede ausgegebene Adresse einmalsed
aufgerufen.Alternativ können Sie zuerst die übereinstimmenden Zeilen suchen und protokollieren und dann die IP-Adressen separat extrahieren:
quelle
<
sendet den Inhalt von / var / log / syslog ansed
on stdin.Usage: whois [OPTION]... OBJECT...
Vielleicht ist der folgende Code ein geeigneter Ausgangspunkt für Sie. Es ist wahrscheinlich nicht die optimale Lösung, aber es macht seinen Job.
Es besteht aus einer for-Schleife über alle Ausgabezeilen des Befehls innerhalb von $ (). In jeder Iteration der Schleife wird eine Ausgabezeile in der Variablen IP gespeichert. Dann wird in der Schleife der Befehl whois mit $ IP - dem Inhalt der Variablen IP - als Argument aufgerufen.
Die Klammern $ () schließen zwei grep-Befehle ein - der erste sucht nach IP-Adressen, vor denen SRC = steht, und der zweite nimmt die Ausgabe des ersten (über eine Pipe |) und nimmt nur die IP-Adresse. Das Flag -o von grep bewirkt, dass nur der übereinstimmende Teil der Zeilen anstelle der vollständigen Zeilen ausgegeben wird.
Der reguläre Ausdruck ist auch noch nicht sehr elegant. Es wird nach drei Gruppen gesucht, die jeweils aus ein bis drei Ziffern und einem Punkt bestehen, gefolgt von ein bis drei Ziffern. Um das Skript lesbar zu halten, habe ich mich für erweiterte reguläre Ausdrücke -E entschieden. Der "normale" grep-Befehl würde einen Backslash vor jeder runden und geschweiften Klammer erfordern ...
quelle
Ihr Skript sollte folgendermaßen aussehen:
quelle
Für das Hinzufügen einer Option - im Falle des Auftauchens von "INVALID STATE" - würde dies dann funktionieren? ::
quelle