Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Perl script soll /var/log/messages einlesen und Ip ausgeben

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
byron1778
Hacker
Hacker
Beiträge: 443
Registriert: 25. Nov 2004, 13:19

Perl script soll /var/log/messages einlesen und Ip ausgeben

Beitrag von byron1778 »

Hallo Leute,

ich versuche mir ein Script zusammenzubasteln, welches mir die /var/log/messages durchsucht und dabei eine bestimmte IP ausgibt (in meinem Fall alle IP´s die anfangen mit 195.34.133).

Leider haut das Ganze aber nicht so in wie ich es gerne möchte!

#!/usr/bin/perl -w

use strict;
use warnings;

my $messages = "/var/log/messages";
my $ip = "195.34.133.";

open($messages,"$messages") or die $!;
while (<$messages>){
if($ip){
print $_;}
close($messages);
}

Kann mir jemand vielleicht sagen wo genau der Fehler drinnen steckt bzw es richtig stellen?

Vielen Danke und mfg

Bernd
Benutzeravatar
snaewe
Hacker
Hacker
Beiträge: 415
Registriert: 13. Dez 2004, 16:32
Wohnort: Zu Hause

Beitrag von snaewe »

Was spricht gegen

Code: Alles auswählen

grep '195\.34\.133\.' /var/log/messages
??

Stefan
Der Name Windows stammt ursprünglich aus dem Indianischen und
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
byron1778
Hacker
Hacker
Beiträge: 443
Registriert: 25. Nov 2004, 13:19

Perl script soll /var/log/messages einlesen und Ip ausgeben

Beitrag von byron1778 »

Hallo,

da hast du recht, wollte es nur mit Perl realisieren das Ganze.

Natürlich geht es auch anders :)

Vielleicht eine Idee wie ich es mit meiner Methode hinbekomme?

Vielen Dank u.

mfg
Bernd
rodhel
Newbie
Newbie
Beiträge: 5
Registriert: 9. Feb 2005, 10:06

Beitrag von rodhel »

statt if($ip) mal mit


if (/195\.34\.133\./)

versuchen?
Benutzeravatar
snaewe
Hacker
Hacker
Beiträge: 415
Registriert: 13. Dez 2004, 16:32
Wohnort: Zu Hause

Beitrag von snaewe »

Muss das nicht irgenwie so aussehen:

Code: Alles auswählen

...
if($_ =~ $ip){
print $_;} 
...
(Bin kein Perl-Spezi...)


Stefan
Der Name Windows stammt ursprünglich aus dem Indianischen und
bedeutet: "Weißer Mann, der auf eine Sanduhr starrt."
byron1778
Hacker
Hacker
Beiträge: 443
Registriert: 25. Nov 2004, 13:19

Perl script soll /var/log/messages einlesen und Ip ausgeben

Beitrag von byron1778 »

Hallo,

er bringt dann beim Kompilieren folgende Fehlermeldung!

Name main:message used only one, possibly typo at line 10
CAnt use string /var/log/message as symbol ref while "strict refs" in use at line 9.
rodhel
Newbie
Newbie
Beiträge: 5
Registriert: 9. Feb 2005, 10:06

Beitrag von rodhel »

Ich kenne es nur so

(ip-adresse direkt reingeschrieben, da bei variablen in /.../ evt. eval verwendet werden muss.)


#!/usr/bin/perl -w

my $messages = "/var/log/messages";

open(MSG,"$messages") or die $!;
@line = <MSG>;
close (MSG);

foreach (@line) {
if (/195\.34\.133\./) { print $_; }
}
byron1778
Hacker
Hacker
Beiträge: 443
Registriert: 25. Nov 2004, 13:19

Perl script soll /var/log/messages einlesen und Ip ausgeben

Beitrag von byron1778 »

Jetzt fehlt im das richtige Package noch und bei /195 ..... hat er noch was einzuwenden

ABer daran sollt es nicht scheitern!

Danke vielmals.

Mfg
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Re: Perl script soll /var/log/messages einlesen und Ip ausge

Beitrag von regexer »

So funktioniert es:

Code: Alles auswählen

#!/usr/bin/perl -w

use strict;
use warnings;

my $messages='/var/log/messages';
my $ip='192\.168\.1\.';     # einfache Hochkommas wichtig

open (MSG,"<$messages") || die $!;
while (<MSG>) {
  print if (/$ip/);
}
Bei der variablen $ip sind die einfachen Hochkommas wichtig, da sonst die Backslashes während der Zuweisung verschwinden. Alternativ würde gehen:

Code: Alles auswählen

my $ip="192\\.168\\.1\\.";
Andernfalls findet die Abfrage auch "192x168x1x"
byron1778
Hacker
Hacker
Beiträge: 443
Registriert: 25. Nov 2004, 13:19

Perl script soll /var/log/messages einlesen und Ip ausgeben

Beitrag von byron1778 »

Hallo,

danke Dir vielmals.

Habe gestern auch noch eine andere Möglichkeit gefunden, obwohl der Code von mir natürlich um vieles länger ist.

Werde Deinen dann auch sofort ausprobieren!

Mfg
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

snaewe hat geschrieben:Muss das nicht irgenwie so aussehen:

Code: Alles auswählen

...
if($_ =~ $ip){
print $_;} 
...
Nicht zwingend! Viele Perl-Befehle greifen Standardmäßig auf $_ zu, wenn man keine Varialbe angibt.

Also ist "print $_" und "print" identisch.
Ebenso "if ($_=~/$ip/)" und "if (/$ip/)"
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Re: Perl script soll /var/log/messages einlesen und Ip ausge

Beitrag von regexer »

byron1778 hat geschrieben:Jetzt fehlt im das richtige Package noch und bei /195 ..... hat er noch was einzuwenden
Das ist es nicht! Wenn du die Lösung von rodhel verwenden willst, musst du entweder vor @line=<MSG> den Befehl "my" setzen, oder du darfst "use strict" nicht verwenden.

"use strict" bewirkt nämlich, dass jede Varialbe (in diesem Fall sogar ein Array) vor der ersten Benutzung mit "my" definiert werden muss. Wenn du "use strict" weglässt, werden Felder einfach bei der ersten Benutzung geboren - ähnlich wie bei BASIC.
Antworten