Itu karena Anda menulis -W 3
bukannya -W 48
. Namun, ada kesalahan lain dalam perintah Anda.
Opsi -G
artinya:
-G rotate_seconds
Jika ditentukan, putar file dump yang ditentukan dengan
-w
pilihan setiap rotate_seconds detik. File simpanan akan memiliki nama yang ditentukan oleh-w
yang harus menyertakan format waktu seperti yang didefinisikan oleh strftime(3). Jika tidak ada format waktu yang ditentukan, setiap file baru akan menimpa file sebelumnya.Jika digunakan bersama dengan
-C
opsi, nama file akan berbentuk 'file'.
Sejak Anda menulis -G 3
, Anda akan merotasi ini setiap 3 detik, saat Anda menyatakan
...yang menangkap data selama 30 menit
Juga, skema penamaannya salah:dari atas,
Jika digunakan bersama dengan
-C
opsi, nama file akan berbentuk 'file'.
Jadi tidak ada gunanya menentukan format waktu untuk nama tersebut.
Selanjutnya, -C
opsi tidak memiliki argumen, sedangkan, menurut halaman manual, seharusnya:
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c menghitung ]
[ -C ukuran_file ] [ -G putar_detik ] [ -F berkas ][ -I antarmuka ] [ -m modul ] [ -M rahasia ][ -r berkas ] [ -s jepret ] [ -T ketik ] [ -w berkas ][ -W jumlah file ][ -E [email protected] algo:rahasia,... ][ -y tipe tautan data ] [ -z perintah-postrotate ] [ -Z pengguna ] [ ekspresi ]
Halaman manual menyatakan:
-C
Sebelum menulis paket mentah ke file simpanan, periksa apakah file saat ini lebih besar dari ukuran_file dan, jika demikian, tutup savefile saat ini dan buka yang baru. File simpanan setelah file simpanan pertama akan memiliki nama yang ditentukan dengan
-w
bendera, dengan nomor setelahnya, mulai dari 1 dan berlanjut ke atas. Satuan file_size adalah jutaan byte (1.000.000 byte, bukan 1.048.576 byte).
Jadi, Anda harus menentukan -C 100
untuk menghasilkan file 100MB.
Pada akhirnya, perintah Anda seharusnya adalah:
tcpdump -i en0 -w /var/tmp/trace -W 48 -G 1800 -C 100 -K -n
Ini akan memutar file (dengan nama trace1, trace2, ...) secara siklis, dengan periode 48, baik setiap 1800 detik (=30 menit) atau setiap 100MB, mana saja yang lebih dulu.
Memperluas jawaban flabdablet (mengubah -G 1800
ke -G 300
–rotasi setiap lima menit –hanya untuk tujuan pengujian),
tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300
akan memberi Anda %m=month
, %d=day of month
, %H=hour of day
, %M=minute of day
, %S=second of day
, %s=millisecond of day
, menghasilkan
/var/temp/trace-03-02-08-30-56-1520002568
/var/temp/trace-03-02-08-35-56-1520002568
/var/temp/trace-03-02-08-40-56-1520002568
Sangat berguna untuk mengatur pelacakan untuk masalah intermiten yang mengganggu tersebut. Juga, jika Anda bukan root, Anda mungkin ingin sudo
dan tentu saja menjadikannya nohup:
sudo bash -c "nohup tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300 &"
Menurut saya yang Anda butuhkan hanyalah
tcpdump -i en0 -G 1800 -w /var/tmp/trace-%H-%M.pcap
Penentu format strftime yang diharapkan -G dalam nama file -w tidak harus mewakili tanggal dan waktu yang lengkap. Dengan hanya %H dan %M di sana, dan waktu rotasi tepat setengah jam, setiap pemanggilan tcpdump yang diberikan hanya akan menghasilkan dua nilai %M yang berbeda dengan jarak setengah jam, dan file jejak kemarin akan ditimpa pada jam yang sama dan angka menit berputar lagi.