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

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

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

Moderator: Moderatoren

Antworten
BastardBenny
Newbie
Newbie
Beiträge: 6
Registriert: 27. Aug 2008, 11:13

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

Beitrag von BastardBenny »

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: Alles auswählen

#!/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
Zuletzt geändert von BastardBenny am 27. Aug 2008, 14:28, insgesamt 1-mal geändert.
spoensche
Moderator
Moderator
Beiträge: 7587
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: BashScript -- tcpdump -> FTP

Beitrag von spoensche »

Sicher das das Script funktioniert? find kennt den Parameter

Code: Alles auswählen

-iname
nämlich nicht, sondern nur den Parameter

Code: Alles auswählen

-name
.

Er kann die Dateien auch nicht in den Ornder kopieren, weil du die Dateien nach

Code: Alles auswählen

/FTP/$dir
kopierst, obwohl du nur in dem Wurzelverzeichnis auf dem Server

Code: Alles auswählen

mkdir $dir
das Verzeichnis erstellts wo er hinkopieren soll und nicht unter

Code: Alles auswählen

/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.
BastardBenny
Newbie
Newbie
Beiträge: 6
Registriert: 27. Aug 2008, 11:13

Re: BashScript -- tcpdump -> FTP

Beitrag von BastardBenny »

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

Ja das Script funktioniert tatsächlich...wenn ich es so ausführe wie oben beschrieben dann bekomme ich folgende ausgabe:

Code: Alles auswählen

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: Alles auswählen

mkdir $dir
in

Code: Alles auswählen

mkdir /FTP/$dir
umändere, dann bekomme ich genau das selbe...
ich denke /FTP/ ist der Default Ordner auf dem Server
Benutzeravatar
Geier0815
Administrator
Administrator
Beiträge: 4449
Registriert: 14. Jun 2004, 09:12

Re: BashScript -- tcpdump -> FTP

Beitrag von Geier0815 »

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.
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?
BastardBenny
Newbie
Newbie
Beiträge: 6
Registriert: 27. Aug 2008, 11:13

Re: BashScript -- tcpdump -> FTP

Beitrag von BastardBenny »

Vielen Dank! aber ich habe das Problem soeben gelöst...

Code: Alles auswählen

                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?
BastardBenny
Newbie
Newbie
Beiträge: 6
Registriert: 27. Aug 2008, 11:13

Re: BashScript -- tcpdump -> FTP

Beitrag von BastardBenny »

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
Moderator
Beiträge: 7587
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

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

Beitrag von spoensche »

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.
BastardBenny
Newbie
Newbie
Beiträge: 6
Registriert: 27. Aug 2008, 11:13

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

Beitrag von BastardBenny »

Mein Skript:

Dateien auf FTP:

Code: Alles auswählen

#!/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: Alles auswählen

#!/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!
Antworten