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


14

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


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ę.


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.


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

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


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

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.