Jak przechwytywać ostatnie N sekund pakietów za pomocą tcpdump

14

Jak przechwycić ostatnie N sekund pakietów za pomocą tcpdump?

Flimzy
źródło
1
„Daj mi” nie zaprowadzi cię daleko. Może powinieneś pokazać nam, co próbowałeś do tej pory i gdzie dokładnie masz problemy, których sam nie możesz rozwiązać.
matthias krull
Polecenie bash to: „man tcpdump”
William Pursell

Odpowiedzi:

15

Jeśli chcesz, aby tcpdump działał przez n sekund, a następnie zakończył pracę, możesz użyć limitu czasu.

Na przykład:

timeout 2 tcpdump -eni mon0

W przeciwnym razie nie wierzę, że tcpdump ma taką opcję.

sjesta
źródło
Niestety polecenie przekroczenia limitu czasu nie występuje w CentOS 5.x. Został dodany w nowszej wersji coreutils. Kolejna motywacja do aktualizacji systemu operacyjnego.
Mister_Tom
Podejrzewam, że jeśli nie masz limitu czasu, możesz zamiast tego stworzyć coś takiego jak limit czasu:
siesta
Działa świetnie dla mnie. Użyłem tego do monitorowania całego ruchu dla programu, który nie działał. Uruchomiłem tcpdump z limitem czasu wynoszącym N sekund. Potem uruchomiłem program (co zajmuje do N sekund).
Trevor Boyd Smith
Pytanie dotyczy uchwycenia ostatnich N sekund. Twoja odpowiedź mówi, jak uchwycić pierwsze N sekund.
Flimzy
3

Myślę, że najlepszym sposobem na osiągnięcie tego jest użycie flagi -G tcpdump, która w połączeniu z -w będzie zapisywać twój zrzut do nowego pliku co N sekund. Na przykład:

tcpdump -w plik_wyjściowy% s -G 10

Spowoduje to utworzenie nowego pliku o nazwie „outfile-XXXX” (gdzie XXXX oznacza liczbę sekund od epoki) co 10 sekund.

Zobacz strony podręcznika dla tcpdump (8) i strftime (3), aby uzyskać dodatkowe informacje.

Flimzy
źródło
tcpdump 3.9.4 dostarczany z CentOS 5.10 nie ma opcji -G. Naprawdę muszę zaktualizować system operacyjny.
Mister_Tom
-G nie zatrzymuje polecenia tcpdump. Nadal działa wiecznie. Limit czasu 2 tcpdump zatrzyma polecenie po 2 sekundach.
ciceron
@ciceron: Pytanie nie dotyczyło zatrzymania tcpdump. Chodziło o uchwycenie ostatnich N sekund . Twoja sugestia uchwyci pierwsze N sekund. Zdecydowanie nie to, o co prosił PO.
Flimzy,
1

Możesz użyć tethereal zamiast tcpdump. Możesz użyć tej opcji wiersza polecenia:

-a duration:X
Ugo
źródło
Chociaż może to odpowiedzieć na pytanie, lepszym rozwiązaniem byłoby podanie wyjaśnienia, dlaczego tak się dzieje.
DavidPostill
Sam program tcpdump nie pozwala na ograniczone czasowo śledzenie pakietów, ale tshark tak. (nb od czasu zadania i odpowiedzi na to pytanie, Ethereal stał się Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcapprzechwyci ruch o wartości dziesięciu minut z interfejsu eth0 do pliku $ (nazwa hosta) .10mins.pcap
Andrew Beals
0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

zanotuj PID, powiedzmy, że to 11193

at 11:00 kill 11193

teraz poczekaj, aż nadejdzie godzina 11:00, a schwytanie zostanie zabite, ale uratowane

spartakus
źródło
fwiw pgrep jest znacznie lepszą alternatywą dla ps | grep; szczególnie tutaj.
Good Person
0

Próbowałem rozwiązać ten sam problem, więc napisałem przenośny skrypt, aby uruchomić tcpdump na n sekundę.

#tcpdump_for_n_sec.sh
n=$1
shift #remove first arg from $@ 
tcpdump $@ & x=$!
sleep $n
kill $x

Zastosowanie ./tcpdump_for_n_sec.sh sec argumenty dla tcpdump

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap
Lafferc
źródło
0

sudo tcpdump -i -w, a to uruchomi tcpdump w trybie uśpienia

  • w: zapisz dane wyjściowe w pliku .pcap &: proces tcpdump zostanie uruchomiony w trybie uśpienia Uwaga: upewnij się, że masz wystarczającą ilość wolnego miejsca, jeśli chcesz. uruchomić go przez chwilę. Nie wyłączy się, jeśli wylogujesz się, dopóki nie zabijesz procesu.
Lin-man
źródło