tcpdump - putar ambil file menggunakan -G, -W dan -C

14

Saya mencari untuk dapat menangkap output tcpdump yang berputar yang menangkap data senilai 30 menit, menjadi 48 file, secara siklis.

Halaman manual menyiratkan ini harus dimungkinkan, tetapi pengujian saya tampaknya tidak menghasilkan hasil yang saya cari:

-W

      Digunakan bersama dengan -Copsi, ini akan membatasi jumlah file yang dibuat ke nomor yang ditentukan, dan mulai menimpa file dari awal, sehingga menciptakan buffer 'rotating'. Selain itu, ini akan memberi nama file dengan 0s terkemuka cukup untuk mendukung jumlah file maksimum, memungkinkan mereka untuk mengurutkan dengan benar.

      Digunakan bersama dengan -Gopsi, ini akan membatasi jumlah file dump yang diputar yang dibuat, keluar dengan status 0 saat mencapai batas. Jika digunakan dengan -Cjuga, perilaku akan menghasilkan file siklus per kutu waktu.

Saya menjalankan ini pada klien OS X 10.9.5 / 10.10.3. Inilah perintah tesnya; hanya keluar setelah file ke-3:

tcpdump -i en0 -w /var/tmp/trace-%Y-%M-%d_%H.%M.%S.pcap -W 3 -G 3 -C -K -n
Andrew
sumber
tolong

Jawaban:

13

Itu karena Anda tulis -W 3bukan -W 48. Namun, ada kesalahan lain dalam perintah Anda.

Opsinya -Gberarti:

-G rotate_seconds

      Jika ditentukan, putar file dump yang ditentukan dengan -wopsi setiap rotate_seconds detik. Savefiles akan memiliki nama yang ditentukan -wyang harus menyertakan format waktu seperti yang didefinisikan oleh strftime (3). Jika tidak ada format waktu yang ditentukan, setiap file baru akan menimpa yang sebelumnya.

      Jika digunakan bersamaan dengan -Copsi, nama file akan berbentuk ' file <count>'.

Karena Anda menulis -G 3, Anda akan memutarnya setiap 3 detik, saat Anda menyatakannya

... yang menangkap data senilai 30 menit

Juga, skema penamaan salah: dari atas,

Jika digunakan bersamaan dengan -Copsi, nama file akan berbentuk ' file <count>'.

Jadi tidak ada gunanya menentukan format waktu untuk nama.

Selanjutnya, -Copsi tidak memiliki argumen, sementara, menurut halaman manual , itu harus:

tcpdump [  -AdDefIKlLnNOpqRStuUvxX  ] [  -B  buffer_size  ] [  -c  count  ]
-C  FILE_SIZE  ] [  -G  rotate_seconds  ] [  -F  berkas  ] [  -I  antarmuka  ] [  -m  modul  ] [  -M  rahasia  ] [  -r  berkas  ] [  -s  snaplen  ] [  -T  type  ] [  -w  file  ] [  -W  filecount  ] [  -E  spi @ ipaddr algo: secret, ... ] [  -y  datalinktype  ] [  -z  postrotate-command  ] [  -Z  user  ] [  ekspresi  ]

The man page negara:

-C

      Sebelum menulis paket mentah ke savefile, periksa apakah file saat ini lebih besar dari file_size dan, jika demikian, tutup savefile saat ini dan buka yang baru. Savefiles setelah savefile pertama akan memiliki nama yang ditentukan dengan -wbendera, dengan nomor setelahnya, mulai dari 1 dan terus ke atas. Unit file_size adalah jutaan byte (1.000.000 byte, bukan 1.048.576 byte).

Jadi, Anda harus menentukan -C 100untuk menghasilkan file 100 MB.

Pada akhirnya, perintah Anda harus:

tcpdump -i en0 -w /var/tmp/trace -W 48 -G 1800 -C 100 -K -n

Ini akan memutar file (dari nama trace1, trace2, ...) secara siklis, dengan periode 48, baik setiap 1800 detik (= 30 menit) atau setiap 100 MB, mana yang lebih dulu.

MariusMatutiae
sumber
Jawaban pada akhirnya tidak memenuhi syarat If no time format is specified, each new file will overwrite the previous.(Saya telah memperbarui jawabannya.)
okwap
2
@okwap, ketika Anda mengedit jawaban (untuk menambahkan -% Y-% m-% d_% H:% M:% S), Anda memutus bagian siklus menggunakan -G, -C, dan -W bersamaan. Jawaban asli menggunakan just / var / tmp / trace untuk nama file -w benar dan menghasilkan keluaran siklik yang dimaksudkan seperti yang dijelaskan (trace1, trace2, ...). Saat menggunakan -G, -C, dan -W secara bersamaan, Anda tidak bisa menggunakan format strftime dalam nama file dan masih mendapatkan output siklik. Dengan hasil edit Anda, tcpdump hanya akan terus menulis file secara non-cyclically karena nama file tidak pernah diulang.
Bill Menees
@BillMenees Terima kasih telah memperhatikan ini, saya telah membatalkan pengeditan okwap.
MariusMatutiae
Sama seperti Swinster dalam komentar di bawah, saya perhatikan bahwa jawaban ini tidak menghasilkan perilaku yang diharapkan. Menggunakan -w -W -C dan -G bersamaan menyebabkan file yang sama ditimpa berulang kali. Itu tidak menyebabkan sejumlah file dibuat sama dengan -W <n> seperti yang diharapkan.
Niels2000
6

Memperluas jawaban flabdablet (berubah -G 1800menjadi -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 memberikan %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of day, sehingga

/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 jejak untuk masalah intermiten sial itu. Juga, jika Anda tidak root, Anda mungkin ingin sudodan tentu saja membuatnya tidak menjadi:

sudo bash -c "nohup tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300 &"
jarofnstdkys
sumber
3

Menurut saya semua yang Anda butuhkan adalah

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 setengah jam terpisah, dan file jejak kemarin akan ditimpa ketika jam yang sama dan angka menit bergulung lagi.

flabdablet
sumber
1

Setelah beberapa percobaan, saya tidak bisa mendapatkan jawaban @MariusMatutiae berfungsi seperti yang diharapkan. Jika waktu menjadi faktor pembatas dan tanpa penambahan format waktu ke nama file, maka file pcap saat ini hanya ditimpa.

Misalnya, coba:

tcpdump -i en0 -w /var/tmp/trace -W 10 -G 5 -C 1

Yang akhirnya Anda trace.pcap0tulis terus berulang.

Seperti yang disarankan dalam komentar, jika Anda menambahkan format waktu ke nama file, maka Anda hanya berakhir dengan dan setiap daftar file yang berkembang.

Karena itu, saya harus tetap menggunakan file terbatas ukuran sederhana:

tcpdump -i en0 -w /var/tmp/trace -W 48 -C 100
Swinster
sumber
0

Ya, sepertinya itu tidak berfungsi seperti jawaban MariusMatutiae .

tcpdump ...{other options}... -w httpdebug.pcap -W 48 -G 1800 -C 100
$ ls -l
-rw-r--r--. 1 tcpdump tcpdump  100007441 Mar 17 17:57 httpdebug.pcap00
-rw-r--r--. 1 tcpdump tcpdump   46895104 Mar 17 18:02 httpdebug.pcap01
-rw-r--r--. 1 tcpdump tcpdump   93091143 Mar 17 17:47 httpdebug.pcap02
-rw-r--r--. 1 tcpdump tcpdump    5372072 Mar 17 16:17 httpdebug.pcap03

Sepertinya saya mungkin menangkap sebanyak mungkin -C 100file MB dalam 30 menit karena httpdebug.pcap03memiliki stempel waktu paling awal dan jauh lebih kecil dari 100MB, jadi sepertinya dipotong pada tanda 30 menit. Setelah mencapai 30 menit, tampaknya akan melompat kembali ke httpdebug.pcap00dan menambah angka saat mencapai 100MB. Ini berarti bahwa jika Anda memiliki banyak permintaan dalam periode 30 menit, Anda mendapatkan angka httpdebug.pcapXX yang sangat tinggi. Jika Anda tidak pernah mencapai sebanyak itu permintaan dalam suatu periode lagi, angka-angka httpdebug.pcapXX yang tinggi itu tidak akan pernah ditimpa.

Jadi saya berpikir file siklikal per kutu waktu berarti kutu waktu itu -G 1800dan akan siklus setiap -G 1800dan setiap kenaikan -C 100.

Saya tidak yakin apakah -W 48memengaruhinya, tetapi mungkin jika Anda mendapatkan httpdebug.pcap47(hitungan dimulai dari 0`, itu akan berhenti menangkap paket.


Agak baru-baru ini, ada masalah GitHub dibuka tentang kata-kata yang membingungkan. Mereka tidak mengubah implementasi, tetapi mereka mencoba untuk membuat dokumentasi sedikit lebih jelas.

The perubahan yang diusulkan digabung dalam pada Jan 28, 2019 .

Sampai hari ini, 17 Maret 2019, berikut adalah dokumentasi saat ini:

-C:

.BI \-C " file_size"
Before writing a raw packet to a savefile, check whether the file is
currently larger than \fIfile_size\fP and, if so, close the current
savefile and open a new one.  Savefiles after the first savefile will
have the name specified with the
.B \-w
flag, with a number after it, starting at 1 and continuing upward.
The units of \fIfile_size\fP are millions of bytes (1,000,000 bytes,
not 1,048,576 bytes).

-G:

.BI \-G " rotate_seconds"
If specified, rotates the dump file specified with the
.B \-w
option every \fIrotate_seconds\fP seconds.
Savefiles will have the name specified by
.B \-w
which should include a time format as defined by
.BR strftime (3).
If no time format is specified, each new file will overwrite the previous.
Whenever a generated filename is not unique, tcpdump will overwrite the
preexisting data; providing a time specification that is coarser than the
capture period is therefore not advised.
.IP
If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.

-W:

.B \-W
Used in conjunction with the
.B \-C
option, this will limit the number
of files created to the specified number, and begin overwriting files
from the beginning, thus creating a 'rotating' buffer.
In addition, it will name
the files with enough leading 0s to support the maximum number of
files, allowing them to sort correctly.
.IP
Used in conjunction with the
.B \-G
option, this will limit the number of rotated dump files that get
created, exiting with status 0 when reaching the limit.
.IP
If used in conjunction with both
.B \-C
and
.B \-G,
the
.B \-W
option will currently be ignored, and will only affect the file name.

Saya masih berpikir itu agak membingungkan, tapi saya kira perbedaan dari kesimpulan saya di atas, adalah bahwa ia mengatakan -Wketika digunakan dengan -C -Gtidak mempengaruhi apa pun kecuali nama file.

Secara umum, -Wdigunakan untuk membatasi jumlah file. Jadi jangan gunakan itu jika Anda ingin menangkap tanpa batas.

dosentmatter
sumber