Techniken der Programmierung in Perl: Writing Checker accsess log

Techniken der Programmierung in Perl: Writing Checker accsess Protokoll.
(Von Rel4nium | ngh.void.ru)

In diesem Artikel möchte ich Sie über die Grundlagen der Programmierung in Perl auf einem konkreten Beispiel zu erzählen.
Das erste, was Sie brauchen, ist ein Dolmetscher perla.V linuksopodobnyh Systeme, hat es
deflot auf, aber wenn Sie auf unter Programme entscheiden * gewinnen, dann werden Sie brauchen: ActivePerl.Skachivay,
Sets, Probleme entstehen nicht dolzhno.Ne wird rassusolivat lang, und uns an die Arbeit,
Lassen Sie uns beginnen.

Skript Zweck - Server Erfassen der Anwesenheit von Muscheln in einem Web-Systemleistung
Teams durch die anfälligen Skripten.

Sobald wir mit dem Zweck des Skripts kam, um herauszufinden, was er in der Lage sein sollte,
machen den Algorithmus zu arbeiten.

Fähigkeiten:

- Mit den Dateien zu umgehen, öffnen / schließen / lesen / schreiben
- Um die notwendigen Informationen berücksichtigen müssen Sie die Auswahlregeln zu organisieren
- Suche nach der richtigen Datei
- Speichern Sie die Suchergebnisse in einer Protokolldatei

Algorithmus:

1) benötigen Sie den Server-Log-Datei zu öffnen
2) zu sammeln, die Suchbasis auf den gewünschten Dateinamen, Befehle, Anfragen
3) eingeben es in der Anordnung
4) eine große Anordnung von Namen von Skripts, und andere, in einer anderen Anordnung zu bringen,
5) zu organisieren, um die vollständige Palette von Such
6) Ein Suchergebnis wird angezeigt
7) Geben Sie ein Suchergebnis in Datei

Starten Sie jetzt das Script-Code zu schreiben, die sich aus den oben genannten Elemente.

#! / Usr / local / bin / perl
^^^^^^^^^^^^^^^^^^^^^
Die erste Zeile im Skript, teilt es dem Interpreter, dass diese Perl-App.

# Chequer Apache-Logs
^^^^^^^^^^^^^^^^^^^
Grillsymbol wird verwendet, in den Körper eines Skriptkommentars einfügen

print "\ n";
^^^^^^^^^^^
Zweck dieses Befehls keine Informationen über den Bildschirm zu bringen, oder zeigen Sie es in
fayl.V diesem Fall wird dieser Befehl verwendet wurde einfach weggelassen
Linie, das heißt \ n für Zeilenumbrüche verwendet.

drucken "[Log prüfen für Apache \ t";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Zeigen Sie den Ausdruck [Log prüfen für Apache, nachdem der Satz, den wir Registerkarten (dh wie
Verwenden Sie Tab-Taste) Beachten Sie die Syntax der das Schreiben von Code, nach dem Druckbefehl
wir sind doppelte Anführungszeichen, und in ihnen wir vorschreiben, was wir auf den Bildschirm zu bringen müssen,
und ein Feldcode Band wird verwendet zapyatoy.Esli nicht einige dieser Elemente zu zeigen,
Perl-Interpreter mögen es nicht, und es wird nur dann einen Fehler ausspucken.
Der Fehler kann in folgender Form vorliegen:
Syntaxfehler bei /patch/to/script.pl Linie 9, in der Nähe von "print"
Ausfürung von /patch/to/script.pl wegen Übersetzungsfehlern abgebrochen.
Aufgrund dieses Fehlers, können wir folgendes verstehen:
Fehler in der Syntax, in Linie 9 in der Druckfunktion wurde das Skript wegen Übersetzungsfehlern unterbrochen.
Dh Dolmetscher sagt uns, dass er nicht mag, können wir nur beheben einen Fehler in
9 Linie.

print "(C) Next Generation Hacker-Gruppe> durch rel4nium codiert]";
print ">>> Vielen Dank an Cr4sh und Gotius \ n \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Auf typische Bündel von Code habe ich erwähnt oben.

$ File = "access.log"; # Log-Datei
^^^^^^^^^^^^^^^^^^^^^
Betrachten wir nun den Code ein bisschen komplizierter ist. In diesem Zusammenhang wird die Variable $ file, weisen ich einen Wert
access.log (auf Ich werde nicht mit dem Dateinamen, in diesem Fall die ACCESS.LOG arbeiten und variable
$ File, die erheblich die Benutzerfreundlichkeit des Codes verbessert)

###########################
# Web Schalen:

@search [0] = "nstview"; @search [1] = "remview"; @search [2] = "r57shell";
@search [3] = "nghshell"; @search [4] = "c99shell"; @search [5] = "dump_price";
@search [6] = "phpMyAdmin"; @search [7] = "bd.pl"; @search [8] = "KA_uShell";
@search [9] = "phpshell"; @search [10] = "r57pws"; @search [11] = "WebShell";
@search [12] = "shell"; @search [13] = "cmd ="; @search [31] = "telnet.cgi";

Team #:

@search [14] = "ls -al"; @search [15] = "wget"; @search [16] = "curl";
@search [17] = "uname";

# Shell-Anfragen:

@search [19] = "ac = shell"; @search [20] = "work_dir = /"; @search [21] = "tmp";
@search [22] = "img = 1"; @search [23] = "img = 2"; @search [24] = "d =";
@search [25] = "& ef ="; @search [26] = "& shell = 1"; @search [27] = "c = l & d =";
@search [28] = "c = d & d ="; @search [29] = "PHP & var ="; @search [30] = "c = v & d =";

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In diesem Code-Schnipsel, verwende ich ein Array @search Variable von [0] bis [30] in einem Array .T.e
Ich bringe 30 Stück, in meinem Fall 30 slov.OBYaZATELNO variable Nummerierung muss
Es beginnt mit 0.

############################
open (FILE, "$ file") || sterben "Apache-Log-Datei nicht gefunden \ n"; # Fehler? Überprüfen Sie den angegebenen Pfad in die Protokolldatei, Apache
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
Ich öffne die Datei (Sie erinnern sich am Anfang Ich sprach über die Variable $ file gleich, Schlucht access.log Datei hier
Nun, das ist, was wir brauchten, wie Sie sehen können, ich passen nicht in den Dateinamen, und verwenden Sie die Variable).
Datei öffnen Design ist einfach: open (FILE, "$ file")
öffnen - einen Befehl zum Öffnen der Datei
FILE - Datei-Handle (der Griff wieder der Einfachheit halber verwendet wird, das heißt in der Zukunft können wir nicht arbeiten mit
die Variable $ file, und verwenden Sie den Griff einfach) .Opyat auch auf die Rechtschreibregeln des Bandes zahlen
koda.A || sterben "Apache-Log-Datei nicht gefunden \ n"; wird verwendet, um einen Fehler, wenn die Datei ableiten
Nicht gefunden.

while ( )
^^^^^^^^^^^^^^
Führen Sie den Griff FILE Schleife während (dh am Anfang wurde access.log -> $ file -> FILE) .Tsikl - es
wiederkehrende Transaktionen. In unserem Fall haben wir hingen nur access.log Datei bis zu finden
es stammt slova.T.e Schleife ausgeführt wird, bis alle der Wörter (von @search array) nicht gefunden werden,

{Wenn (/ (@ search [0] | @search [1] | @search [2] | @search [3] | @search [4] | @search [5] | @search [6] | @search [ 7] | @search [8]
| @search [9] | @search [10] | @search [11] | @search [12] | @search [13] | @search [14] | @search [5] | @search [16] | @ Suche
[17] | @search [19] | @search [20] | @search [21] | @search [22] | @search [23] | @search [24] | @search [25] | @search [25 ] |
@search [26] | @search [27] | @search [28] | @search [29] | @search [30] | @search [31]) / i) {Push @Matches, $ _;}}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
Verwenden Sie dann eine logische Operation, wenn (if), der Gefangene in {} skobki.Sdes und die Lookup-Prozess
Array-Variablen @ search.T.e Zustand geht wie folgt: wenn einige der Variablen Array @search
gefunden wird, wird es in einem anderen Array von benannten @Matches gespeichert.
das Ergebnis ist ein Array von 1 @Matches mit variabler ACCESS.LOG gefunden Array @search diejenigen, die in der Datei.

Druck @Matches;
^^^^^^^^^^^^^^^
Wir leiten den Inhalt des Arrays auf den Bildschirm @Matches

print "Die Arbeit ist \ n fertig!";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Anzeige eine Arbeit ist fertig!

offen (LogFile, '>> logfile.txt');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Anlegen und Öffnen von logfile.txt Datei (mit dem einrichten Dateinamen >>, diese Klammern
dass die Notwendigkeit, eine Datei zum Schreiben und öffnen Sie sie) .tut zuweisen auch Griff LogFile zu erstellen

Druck Logfile "IP-Adresse \ t Zeit \ t \ t \ t \ t Skripts \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
eine offene Protokolldatei (dh direkt in logfile.txt Datei) schreiben

Druck LogFile @Matches;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
Sind in der Protokolldatei bei der Array-@Matches gedruckt, dh die gefundenen Abfrage / Name @search Array.

Druck Logfile "Die Arbeit ist \ n fertig!";
^^^^^^^^^^^^^^^^^^^^^^^^
Das Schreiben in die Protokolldatei, die die Arbeit beendet ist

Datei schließen;
^^^^^^^^^^^^^^^^^^^^^^^^
schließen Sie die Log-Datei (mit dem er läuft das Skript)

schließen LogFile;
^^^^^^^^^^^^^^^^^^^^^^^^
Schließen Sie die Protokolldatei


EOF
^^^^^^^^^
Ende der Programmlinie

Jetzt ist das Skript betriebsbereit ist, und wird für die Bedürfnisse des Systemadministrator nützlich sein))
Ich denke, mit Hilfe meiner Artikel, die Sie in der Syntax ein wenig verstanden sind, werden die grundlegenden Funktionen von Perl,
und jetzt kann es studierte weiter und tiefer Juwel werden.

> Ich rate Ihnen zu lesen:
Clinton Pierce Sams Teach Yourself Perl innerhalb von 24 Stunden
Perl-Sprachspezifikation

> URL:
www.wmate.ru
www.codenet.ru


ps die in diesem Artikel beschriebenen Skript herunterladen ngh.void.ru/soft/d/checklog.rar sein