PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: Netzverkehr aufzeichnen und auf FTP



BastardBenny
25-08-2008, 10:12
Hallo!

Ich habe erst vor kurzem mit Linux angefangen.
Jetzt habe ich ein Problem mit einer Aufgabe die man mir gegeben hat...

Beim Start von Linux soll immer Automatisch TCPDUMP ausgeführt werden mit folgenden Parametern:
Schnittstelle: eth0; In Datei /root/tcpdump/traffic.cap schreiben; Die Datei darf max. 50MB gross sein.
Nicht mehr als 10 Versionen des Files dürfen erstellt werden. Mit einem Script prüfen, und wenn 10 Dateien im Ordner sind, diese auf einen Windowsserver kopieren (FTP) und die alten löschen.
(Im Moment nehme ich noch WinSCP um die Datei zu prüfen)

Ich habe zuerst

tcpdump –i eth0 –w /root/tcpdump/traffic.cap –C 50
in die Datei /etc/rc.d/rc.local geschrieben, damit tcpdump automatisch beginnt aufzuzeichnen, wenn ich Linux starte.

Dann habe ich mit einem Skript begonnen, das prüft wieviel Files im Ordner sind und wenn es 10 sind, diese auf den FTP server überträgt.

#!/bin/bash
echo Files im Verzeichnis:
find /root/tcpdump/ -iname '*.cap*' -type f | wc -l
#gibt an wieviele .cap Dateien bereits im Verzeichnis sind
echo
T1=$(find /root/tcpdump/ -iname '*.cap*' -type f | wc -l)
if [ "$T1" -gt 10 ]; then
ftp -n xx.xx.x.xx <<!
quote user Test
quote pass test1234
binary
put /root/tcpdump/test.txt /FTP/Backup/test.txt
quit
else
echo kleiner 10
fi

Leider kommt die Fehlermeldung:

[root@websafe-FeelGood tcpdump]# /root/tcpdump/copy.txt
Files im Verzeichnis:
11

/root/tcpdump/copy.txt: line 17: syntax error: unexpected end of file

-----------

Was ich auch noch machen sollte ist, die Daten jeweils in einen Ordner verschieben, der das aktuelle Datum als Ordnername hat!



Ich hoffe ihr könnt mir etwas helfen.
Ich update immerwieder diesen Post wenn ich irgendwo weitergekommen bin...

mhm...ich beschäftige mich erst seit 3 tagen mit Bash... :(


Vielen Dank!
Benny

ContainerDriver
25-08-2008, 12:55
Hallo,

erstmal zu dem Fehler im Skript: mit


ftp -n xx.xx.x.xx <<!

sagst du der Shell, dass alle Eingaben bis zu einem "!" an den gestarteten ftp-Prozess weitergeleitet werden sollen. Allerdings folgt in deinem Skript kein weiteres "!", also wird das frühzeitige Ende der Skriptdatei bemängelt (die if-Verzweigung wird ohne fi beendet, da das fi an den ftp-Prozess weitergereicht wird). Die Lösung ist, hinter quit noch eine Zeile mit ! einzufügen.

Dann zur Aufgabenstellung: wie ist die Regel mit den 10 Versionen der Aufzeichnungsdateien zu verstehen? Soll bei jedem Systemstart eine neue Datei erstellt werden und wenn 10 Dateien existieren diese kopiert werden oder soll, wenn die maximale Dateigröße erreicht wurde, eine neue Datei angefangen werden?

Gruß, Florian

jan61
25-08-2008, 21:53
Moin,


Die Lösung ist, hinter quit noch eine Zeile mit ! einzufügen.


Und diese Zeile muss das ! als erstes und einziges Zeichen enthalten. Keine Leerzeichen, Tabs o. a. vor oder nach dem Zeichen!

Zu der Variante, mit der Du die Anzahl der Dateien lokal ermittelst: Liegen die Dateien in Unterverzeichnissen unterhalb /root/tcpdump? Wenn nein, dann ist der find völlig oversized, da genügt ein einfacher "ls /root/tcpdump/*.cap". Warum lässt Du den find 2x auf das Verzeichnis los? Schreibe das Ergebnis zuerst in eine Variable (der 2. find), die kannst Du dann nach Belieben ausgeben und auswerten.

Zum Verschieben: Soll das lokal oder remote passieren? Das aktuelle Datum kannst Du Dir so in einer Variablen für weitere Verwendung speichern:
DATUM=$(date +%Y%m%d)Jan