• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]BashScript -- tcpdump -> FTP

Hallo!
Ich habe mich bisher noch nie mit Scripting usw. beschäftigt...
kaum habe ich meinen neuen Job angefangen, bekomme ich sogleich eine knifflige Skript aufgabe :-\

Folgendes:

  • 1. tcpdump wird automatisch beim Serverstart gestartet und zeichnet den ganzen Netzwerkverkehr von einer bestimmten Schnittstelle auf und speichert ihn als 50MB Dateien
    2. Die Dateien werden als Datum.cap, Datum.cap2, Datum.cap3, usw. benannt
    3. Sind 10 Files erreicht, startet ein Skript und kopiert diese auf einen FTP-Server in einen automatisch generierten Ordner, der ebenfalls als Datum bezeichnet wird.
    4. Die Dateien werden aus dem linux Verzeichnis gelöscht.
    5. 10 Tage alte Dateien werden vom FTP gelöscht.

Das soll alles automatisch Ausgeführt werden.
Das fertige Script werde ich dann als Cronjob einmal pro Tag ausführen.

So sieht mein Script bis jetzt aus:
Code:
#!/bin/bash

T1=$(find /root/tcpdump/ -iname '*.cap*' -type f | wc -l)
# Variable fuer: Dateien im Verzeichnis

if [ "$T1" -ge 10 ]; then
        # Wenn die Anzahl der Dateien 10 oder mehr sind, wird folgendes Ausgefuert
        USER=Test
        PASS=test1234
        FTPSERVER=xx.xx.x.xx
        dirs=$(ls -1 *.cap* | sort | egrep -o '^[^.]+' | uniq)
        # anlegend er Variablen

        for dir in $dirs; do
                ftp -i -n $FTPSERVER <<EOF
                user $USER $PASS
                # mit FTP verbinden
                binary
                # Uebertragungsart auf Binaer gesetzt
                lcd /root/tcpdump/
                mkdir $dir
                # eventuell noch Pruefung einbauen
                mput $dir.cap* /FTP/$dir/
                # Anlegen der Verzeichnisse und kopieren der Dateien
                quit
EOF
        done

        cd /root/tcpdump/
        rm *.cap*
        # loeschen der kopierten Dateien

else
        echo kleiner 10
fi
Im Moment kann ich leider den FTP Server noch nicht benutzen und deshalb ist es mir auch nicht möglich das Script zu testen.
Kann es so funktionieren wie ich das gemacht habe?


Und dann noch eine wichtige Frage bei der ich nicht weiterkomme:
Wie kann ich automatisch Dateien vom FTP löschen, die älter als 10 Tage sind?


Ich hoffe ihr könnt mir weiterhelfen.

Vielen Dank!
Benny

-----------------------

UPDATE:

OK...konnte es jetzt testen...
es erstellt wunderbar die Ordner die es erstellen sollte, kopiert auch die Dateien auf den Server und löscht sie aus dem Linux verzeichnis
ABER leider kopiert er die Dateien NICHT in die jeweiligen ordner...
d.h. ALLE Dateien und Ordner sind auf /FTP/

mhm...mir ist im moment nicht klar wie ich das anders einstellen könnte :(

plshelp
 

spoensche

Moderator
Teammitglied
Sicher das das Script funktioniert? find kennt den Parameter
Code:
-iname
nämlich nicht, sondern nur den Parameter
Code:
-name
.

Er kann die Dateien auch nicht in den Ornder kopieren, weil du die Dateien nach
Code:
/FTP/$dir
kopierst, obwohl du nur in dem Wurzelverzeichnis auf dem Server
Code:
mkdir $dir
das Verzeichnis erstellts wo er hinkopieren soll und nicht unter
Code:
/FTP/$dir
.

Wegen des lösachens, kannst du auf dem FTP- Server einen Cronjob laufen lassen, der nach Dateien sucht (find), die älter als 10 tage sind und diese dann löscht.
 
OP
B

BastardBenny

Newbie
Also das mit dem -iname habe ich von hier:
http://www.linux-fuer-blinde.de/91-0-dateien-aufspueren-mit-find.html

Ja das Script funktioniert tatsächlich...wenn ich es so ausführe wie oben beschrieben dann bekomme ich folgende ausgabe:
Code:
local: 08-08-27: No such file or directory
für jedes erstellte verzeichnis....

die Verzeichnisse und die Dateien sind auf dem Server! leider sind die Dateien nicht ind en ordnern drin :p

Wenn ich im Script
Code:
mkdir $dir
in
Code:
mkdir /FTP/$dir
umändere, dann bekomme ich genau das selbe...
ich denke /FTP/ ist der Default Ordner auf dem Server
 
Du loggst dich doch als User test auf dem ftp ein. Dort solltest Du durch die Anmeldung im home-Verzeichnis des Users gelandet sein und auch nur dort schreibrechte haben. Zumindest wäre das die Standardkonfiguration bei ftp. Ansonsten zeig bitte mal die Konfig des ftp.
 
OP
B

BastardBenny

Newbie
Vielen Dank! aber ich habe das Problem soeben gelöst...
Code:
                mkdir /FTP/$DIR
                cd /FTP/$DIR
                mput $DIR.cap*
ich habe ein cd eingefügt und den zielparameter von mput gelöscht...so funktioniert es wunderbar.
Ich habe dem testaccount auf dem FTP das Recht gegeben Verzeichnisse zu erstellen/löschen etc.

Jetzt habe ich aber ein neues Problem:
Verzeichnisse bzw. Dateien die älter sind als 10 Tage sollen automatisch vom Server gelöscht werden.
Ich hätte ja etwas mit der find funktion gemacht, allerdings kann ich diese soweit ich weiss nicht benutzen wenn ich in einer FTP session bin...

Weiss da jemand vielleicht was?
 
OP
B

BastardBenny

Newbie
OK!

Das mit dem löschen vom FTP hat sich erledigt...
Das wird jetzt anders gelöst, und ich hoffe ich werde das nicht machen müssen ;)

in diesem Falle Danke für alles
und falls ich noch fragen habe dann melde ich mich.
 

spoensche

Moderator
Teammitglied
Wäre gut, wenn du die Lösung noch mitteilen würdest, dann hätten andere User, die so etwas ähnliches in Betracht ziehen auch noch was davon.
 
OP
B

BastardBenny

Newbie
Mein Skript:

Dateien auf FTP:
Code:
#!/bin/bash
cd /root/tcpdump/

T1=$(find /root/tcpdump/ -iname '*.cap*' -type f | wc -l)
# Variable fuer: Dateien im Verzeichnis

USER=Username des FTP-Servers
PASS=Passwort
FTPSERVER=IP-Adresse des Servers
DIRS=$(ls -1 *.cap* | sort | egrep -o '^[^.]+' | uniq)
# anlegend er Variablen

for DIR in $DIRS; do
        ftp -i -n $FTPSERVER <<EOF
        user $USER $PASS
        # mit FTP verbinden
        binary
        # Uebertragungsart auf Binaer gesetzt
        lcd /root/tcpdump/
        mkdir /FTP/$DIR
        cd /FTP/$DIR
        # eventuell noch Pruefung einbauen
        mput $DIR.cap*
        # Anlegen der Verzeichnisse und kopieren der Dateien
        quit
EOF
done

DT=`date +"%y"-"%m"-"%d"`
tcpdump -i eth0 -w /root/tcpdump/$DT.cap -C 50 &

Dateien ins lokale Archiv:
Code:
#!/bin/bash

DIRS=$(ls -1 *.cap* | sort | egrep -o '^[^.]+' | uniq)

for DIR in $DIRS; do
        mkdir /root/tcpdump/Archiv/$DIR
        cd /root/tcpdump/Archiv/$DIR
        mv /root/tcpdump/$DIR.cap* /root/tcpdump/Archiv/$DIR
        # Dateien werden in jeweilige Ordner ins Archiv verschoben
done

cd /root/tcpdump/Archiv
RD=`find /root/tcpdump/Archiv -mtime +10`
rm $RD
rmdir /root/tcpdump/Archiv/*
# Dateien die aelter als 10 Tage sind werden geloescht

--------
Nochmals vielen Dank an alle!
 
Oben