Strona 1 z 1

skryp w bashu do tcpdump

: 22 listopada 2010, 15:07
autor: Andros
Witam,

Chciałbym logować ruch w sieci lan za pomocą tcpdumpa żeby wszystko zapisywało się do plików tekstowych. Czyli np. ogólnie coś takiego:

Kod: Zaznacz cały

tcpdump >> logi.txt
Mam pytanie, jak napisać skrypt, który przykładowo codziennie o 12 w nocy będzie tworzył nowy plik z dzisiejszą datą, w którym będą zapisywane informacje z tcpdumpa? Dobrze by było oczywiście żeby nic nie było nadpisywane tylko codziennie nowy plik.

: 22 listopada 2010, 16:45
autor: lun
Oto co musisz zrobić:
1. Skrypt do robienia ctpdumpa

Kod: Zaznacz cały

#!/bin/sh
DATA=`date +%Y-%m-%d_%H:%M`
tcpdump > /lokalizacja/tcpdump.$DATA.log
2. Dodanie go do crontaba

Kod: Zaznacz cały

crontab -e

SHELL=/bin/sh
59 23 * * * /lokalizacja_skryptu/nazwa_skryptu.sh
Pisane na szybko więc może gdzieś być błąd :-)

: 22 listopada 2010, 19:09
autor: lessmian2
A nie prościej po prostu w cronie dać:

Kod: Zaznacz cały

59 23 * * * /usr/sbin/tcpdump -jakieś-opcje -w /gdzieśtam/tcpdump.`/bin/date +\%Y-\%m-\%d`.log
Nie przekonuje mnie pisanie skryptu zawierającego jedną linię (i shebang), a następnie dodanie go do crona - to już trzy linie ;)

Zapisywanie przy pomocy -w plik ma tą zaletę, że taki plik można potem analizować za pomocą graficznego wiresharka czy znów tcpdumpem. No chyba, że bardzo chcesz mieć czysty tekst w pliku do dalszej obróbki np. sedem.

: 23 listopada 2010, 09:22
autor: lun
Każdy ma swoje podejście do tematu. Ja np. wolę w cronie trzymać tylko linki do właściwych skryptów (choćby to miała być tylko jedna linijka). Moim zdaniem poprawia to trochę przejrzystość crontaba przy większej liczbie ustawionych zadań :-)

: 23 listopada 2010, 15:24
autor: Andros
Zrobilem tak jak kolega lun napisal, tworzy mi o 12 nowy plik ale te pliki sa puste. Oczywiscie korzystam w trakcie z przegladarki :/

#!/bin/sh
DATA ='date +%Y-%m-%d_%H:%M'
tcpdump -i eth0 dst port 80 \and tcp\[tcpflags\]\=tcp-syn >> /root/tcpdump_lan.$DATA.log



dodam ze jesli wkleje polecenie z bezposrednio w konsoli to na konsoli wyswietla wszytstko ok ale do pliku nie chce :/
co jest nie tak ?

: 23 listopada 2010, 16:36
autor: lun
Sprawdziłem sobie na przykładzie polecenia ping i takie proste przekierowanie działa.

Rozumiem, że wszystko uruchamiasz jako root lub na prawach roota?

Edycja:
A czy czasem w tej linijce:

Kod: Zaznacz cały

DATA ='date +%Y-%m-%d_%H:%M'
masz apostrofy? Z tego co widzę tak (chyba, że pomyliłeś się przy pisaniu).
Zobacz różnicę między ' a `.

Spróbuj najpierw zrobić sobie przekierowanie czegoś najprostszego, czyli wydaj w konsoli polecenie:

Kod: Zaznacz cały

tcpdump > /root/tcp.log
a potem ping chociażby adresu Google. Sprawdź potem zawartość pliku. Jeśli wszystko jest w porządku, to dodaj to proste polecenie do skryptu i wykonaj skrypt. Jeśli dalej jest wszystko w porządku dodawaj kolejne opcje do tcpdumpa i sprawdzaj wyniki. Zrobisz sobie w ten sposób debugowanie i będziesz wiedział, w którym miejscu coś działa źle.

: 23 listopada 2010, 18:56
autor: grzesiek
lun pisze:Oto co musisz zrobić:
1. Skrypt do robienia ctpdumpa

Kod: Zaznacz cały

#!/bin/sh
DATA=`date +%Y-%m-%d_%H:%M`
tcpdump > /lokalizacja/tcpdump.$DATA.log
2. Dodanie go do crontaba

Kod: Zaznacz cały

crontab -e

SHELL=/bin/sh
59 23 * * * /lokalizacja_skryptu/nazwa_skryptu.sh
Pisane na szybko więc może gdzieś być błąd :-)

Ładnie, co dobę nowe wywołanie tcpdump ale gdzie jest kończona praca poprzedniej instancji?
Dziwne, żeby tcpdumpa do tego używać. Nie lepiej serwera proxy uruchomić?

: 25 listopada 2010, 12:32
autor: Andros
Testowałem troszkę i wiem w czym leży problem. Cron wykona mi podaną frazę z tcpdumpem ale nie uruchomi go w taki sposób aby pracował przez cały dzień. Po prostu wykona polecenie:

Kod: Zaznacz cały

tcpdump
ale tylko raz, tak jakby na jedną sekundę i zakończy pracę. Mnie chodzi oczywiście aby zapisywał logi przez cały dzień a następnego dnia tworzył nowy plik itd. Ma ktoś pomysł jak to rozwiązać? Może podrzuci ktoś rozwiązanie w jaki sposób mogę zrobić tak aby codziennie był tworzony jeden plik, w którym będzie zapisany cały ruch jaki przeszedł przez kartę seciową i trafił na port 80 (logowanie przeglądarki). Nie musi to być tcpdump może jakieś inne pomysły?
Proszę o pomoc.

Dodane:
Jakieś pomysły?

: 02 grudnia 2010, 12:47
autor: lun
Wpadł mi do głowy jeszcze pomysł z komendą nohup - ale nie testowałem.

Kod: Zaznacz cały

nohup nazwa_skryptu.sh

: 03 grudnia 2010, 16:00
autor: Andros
lun, jak przeczytałem Twoją odpowiedz myślałem, że znalazłem rozwiązanie ale niestety sytuacja jest identyczna jak przy zwykłym wywołaniu bez nohup.
Próbowałem oczywiście też różnych kombinacji z ampersandem (&) i nadal nic.