skryp w bashu do tcpdump

Potrzebujesz pomocy z C, C++, perl, python, itp.
Andros
Posty: 48
Rejestracja: 11 marca 2009, 17:27
Lokalizacja: Lublin

skryp w bashu do tcpdump

Post 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.
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post 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 :-)
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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.
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post 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ń :-)
Andros
Posty: 48
Rejestracja: 11 marca 2009, 17:27
Lokalizacja: Lublin

Post 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 ?
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post 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.
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post 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ć?
Andros
Posty: 48
Rejestracja: 11 marca 2009, 17:27
Lokalizacja: Lublin

Post 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?
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post autor: lun »

Wpadł mi do głowy jeszcze pomysł z komendą nohup - ale nie testowałem.

Kod: Zaznacz cały

nohup nazwa_skryptu.sh
Andros
Posty: 48
Rejestracja: 11 marca 2009, 17:27
Lokalizacja: Lublin

Post 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.
ODPOWIEDZ