Cara menangkap paket N detik terakhir menggunakan tcpdump

14

Bagaimana saya bisa menangkap paket N detik terakhir menggunakan tcpdump?

Flimzy
sumber
1
"Beri aku" tidak akan membawamu jauh ke sini. Mungkin Anda harus menunjukkan kepada kami apa yang telah Anda coba sejauh ini dan di mana tepatnya Anda memiliki masalah, Anda tidak dapat menyelesaikannya sendiri.
matthias krull
Perintah bash yang Anda inginkan adalah: "man tcpdump"
William Pursell

Jawaban:

15

Jika Anda hanya ingin tcpdump berjalan selama n detik dan kemudian berhenti, Anda bisa menggunakan batas waktu.

Sebagai contoh:

timeout 2 tcpdump -eni mon0

Kalau tidak, saya tidak percaya tcpdump memiliki opsi untuk melakukan ini.

tidur siang
sumber
Sayangnya perintah timeout tidak ada di CentOS 5.x. Itu ditambahkan dalam rilis coreutils yang lebih baru. Motivasi lain bagi saya untuk meningkatkan OS.
Mister_Tom
Saya kira jika Anda tidak memiliki batas waktu, Anda bisa membuat sesuatu seperti batas waktu dengan sebuah skrip:
siesta
Bekerja bagus untukku. Saya menggunakan ini untuk memantau semua lalu lintas untuk program yang tidak berfungsi. Saya mulai tcpdump dengan batas waktu N detik. Kemudian saya memulai program (yang membutuhkan waktu hingga N detik).
Trevor Boyd Smith
Pertanyaannya adalah meminta untuk menangkap N detik terakhir . Jawaban Anda memberi tahu cara menangkap N detik pertama .
Flimzy
3

Saya pikir cara terbaik untuk mencapai ini adalah dengan -c flag tcpdump, yang, ketika digunakan dengan -w, akan menyimpan dump Anda ke file baru setiap N detik. Contohnya:

tcpdump -w outfile-% s -G 10

Ini akan membuat file baru dengan nama 'outfile-XXXX' (di mana XXXX mewakili jumlah detik sejak zaman) setiap 10 detik.

Lihat halaman manual untuk tcpdump (8) dan strftime (3) untuk detail tambahan.

Flimzy
sumber
tcpdump 3.9.4 seperti yang dikirimkan dengan CentOS 5.10 tidak memiliki opsi -G. Saya benar-benar perlu meningkatkan OS saya.
Mister_Tom
-G tidak menghentikan perintah tcpdump. Itu masih berjalan selamanya. Timeout 2 tcpdump akan menghentikan perintah setelah 2 detik.
ciceron
@ciceron: Pertanyaannya bukan tentang menghentikan tcpdump. Itu tentang menangkap N detik terakhir . Saran Anda akan menangkap N detik pertama . Jelas bukan apa yang diminta OP.
Flimzy
1

Anda dapat menggunakan tethereal alih-alih tcpdump. Anda dapat menggunakan opsi baris perintah ini:

-a duration:X
Ugo
sumber
Meskipun ini mungkin menjawab pertanyaan, itu akan menjadi jawaban yang lebih baik jika Anda bisa memberikan penjelasan mengapa itu bisa terjadi.
DavidPostill
tcpdump itu sendiri tidak memungkinkan untuk jejak paket terbatas waktu tetapi tshark tidak. (nb sejak pertanyaan ini ditanyakan dan dijawab, Ethereal menjadi Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcapakan menangkap lalu lintas senilai sepuluh menit dari antarmuka eth0 ke dalam file $ (hostname) .10mins.pcap
Andrew Beals
0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

catat PID, katakan itu 11193

at 11:00 kill 11193

sekarang tunggu sampai 11:00 datang dan tangkapan Anda akan terbunuh tetapi disimpan

spartacus
sumber
fwiw pgrep adalah alternatif yang jauh lebih baik untuk ps | grep; terutama di sini.
Orang Baik
0

Saya mencoba untuk memecahkan masalah yang sama jadi, saya menulis skrip portabel untuk menjalankan tcpdump selama n detik.

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

Penggunaan ./tcpdump_for_n_sec.sh detik args untuk tcpdump

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap
lafferc
sumber
0

sudo tcpdump -i -w & ini akan menjalankan tcpdump adalah mode tidur

  • w: simpan keluaran dalam file .pcap & &: tcpdump akan berjalan dalam mode tidur. Catatan: pastikan Anda memiliki cukup ruang yang tersedia jika Anda mau. untuk menjalankannya sebentar. Itu tidak akan mengganggu jika logoff sampai Anda mematikan proses.
Lin-man
sumber