tcpdump - yakalama dosyalarını -G, -W ve -C kullanarak döndürme


14

Döngüsel olarak 48 dosyaya 30 dakika değerinde veri yakalayan dönen bir tcpdump çıktı yakalamak mümkün olmak istiyorum.

Man sayfası bunun mümkün olabileceğini ima ediyor, ancak testlerim aradığım sonucu üretmiyor gibi görünüyor:

-W

      -CBu seçenekle birlikte kullanıldığında , bu, oluşturulan dosya sayısını belirtilen sayı ile sınırlar ve baştan baştan dosyaların üzerine yazmaya başlayarak 'dönen' bir arabellek oluşturur. Buna ek olarak, maksimum dosya sayısını desteklemek için yeterli baştaki 0'lara sahip dosyaları isimlendirir ve doğru sıralanmalarını sağlar.

      -GSeçenekle birlikte kullanıldığında , bu, sınıra ulaşıldığında durum 0'dan çıkarak oluşturulan döndürülmüş döküm dosyalarının sayısını sınırlayacaktır. -CBununla birlikte kullanılırsa , davranış zaman dilimi başına döngüsel dosyalara neden olur.

Bunu OS X 10.9.5 / 10.10.3 istemcilerde çalıştırıyorum. İşte test komutu; 3. dosyadan sonra çıkar:

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

pls cevabımı gör
MariusMatutiae

Yanıtlar:


13

Çünkü -W 3bunun yerine yazdınız -W 48. Ancak, komutunuzda başka hatalar var.

Seçenek şu -Ganlama gelir:

-G rotate_seconds

      Belirtilirse, -wher rotate_seconds saniyede bir seçenekle belirtilen döküm dosyasını döndürür . Savefiles, -wstrftime (3) tarafından tanımlanan bir saat biçimini içermesi gereken bir ada sahip olacaktır . Herhangi bir saat biçimi belirtilmezse, her yeni dosya bir öncekinin üzerine yazılır.

      -CSeçenekle birlikte kullanılırsa , dosya adları ' dosya <sayı>' biçiminde olur .

Yazdığınızdan beri -G 3, bunu her 3 saniyede bir çevireceksiniz,

... 30 dakika değerinde veri yakalar

Ayrıca, adlandırma düzeni yanlış: yukarıdan,

-CSeçenekle birlikte kullanılırsa , dosya adları ' dosya <sayı>' biçiminde olur .

Dolayısıyla, ad için zaman biçimini belirtmenin bir anlamı yoktur.

Ayrıca, -Cseçeneğin hiçbir argümanı yoktur, ancak man sayfasına göre :

tcpdump'ı [  -AdDefIKlLnNOpqRStuUvxX  ] [  -B  BUFFER_SIZE  ] [  -c  sayısı  ]
-C  file_size  ] [  -G  rotate_seconds  ] [  -F  dosyası  ] [  -I  arayüzü  ] [  -m  modülü  ] [  -M  gizli  ] [  -r  dosyası  ] [  -s  snaplen  ] [  -T  türü  ] [  -w  dosya  ] [  -W  dosya sayımı  ] [  -E  spi @ ipaddr algo: gizli, ... ] [  -y  datalinktype  ] [  -z  postrotate-komut  ] [  -Z  kullanıcı  ] [  ifade  ]

Adam sayfa devletler:

-C

      Bir savefile bir ham paket yazmadan önce, dosya şu anda daha büyük olup olmadığını kontrol FILE_SIZE ve eğer öyleyse, yakın akım saveFile ve yenisini açın. İlk kaydetme dosyasından sonraki kaydetme dosyalarında, adın -wardından 1 ile başlayan ve yukarı doğru devam eden bir sayı ile birlikte bayrak belirtilir . File_size birimleri milyon bayttır (1.048.576 bayt değil 1.000.000 bayt).

Bu yüzden -C 100100 MB dosya üretmek için belirtmelisiniz .

Sonunda, komutunuz şöyle olmalıdır:

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

Bu, dosyaları (trace1, trace2, ... adlarının) periyodik olarak, 48 saniyede bir, 1800 saniyede bir (= 30 dakika) veya her 100 MB'ta (hangisi önce gelirse) döngüsel olarak döndürür.


Son cevap cevap koşulu eksik If no time format is specified, each new file will overwrite the previous.(cevabı güncelledim.)
okwap

2
@okwap, yanıtı düzenlediğinizde (-% Y-% m-% d_% H:% M:% S eklemek için), -G, -C ve -W kullanmanın döngüsel kısmını birlikte kırdınız. -W dosya adı için just / var / tmp / trace kullanan orijinal yanıt doğruydu ve tarif edildiği gibi amaçlanan döngüsel çıktılar üretildi (trace1, trace2, ...). -G, -C ve -W'yi birlikte kullanırken, dosya adındaki strftime biçimini kullanamazsınız ve yine de döngüsel çıktıları alamazsınız. Düzenlemenizle birlikte, dosya adları asla tekrarlanmadığı için tcpdump dosyaları döngüsel olmayan bir şekilde yazmaya devam edecektir.
Bill Menees

@BillMenees Bunu dikkatime sunduğunuz için teşekkürler, okwap düzenlemesini geri aldım.
MariusMatutiae

Aşağıdaki yorumdaki Swinster gibi, bu cevabın beklenen davranışı üretmediğini not ediyorum. -W -W -C ve -G'nin birlikte kullanılması aynı dosyanın üzerine tekrar tekrar yazılmasına neden olur. O mu değil bir beklendiği gibi dosyaların bir sayı -W eşit yaratılmış <n> neden olur.
Niels2000

6

Üzerine Genişleyen flabdablet cevabı (değişen -G 1800için -G 300, sadece test amaçlı - - dönme her beş dakikada)

tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300

verecek %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of daysonuçlanan

/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

Bu sinir bozucu aralıklı sorunlar için izleri düzenlemek için çok yararlıdır. Ayrıca, kök değilseniz sudo, elbette bir nohup yapmak isteyebilirsiniz:

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

3

Bana ihtiyacın olan tek şey

tcpdump -i en0 -G 1800 -w /var/tmp/trace-%H-%M.pcap

-G dosya adında -G'nin beklediği strftime format belirleyicisinin tam bir tarih ve saati temsil etmesi gerekmez. Orada sadece% H ve% M ve tam yarım saatlik bir döndürme süresi olduğunda, tcpdump'ın herhangi bir çağrılması sadece yarım saat arayla iki farklı% M değeri üretir ve aynı saatte dünün izleme dosyalarının üzerine yazılır ve dakika sayıları tekrar döner.


1

Bazı deneylerden sonra, @MariusMatutiae beklendiği gibi çalışmaya cevap alamadım. Eğer zaman sınırlayıcı faktör haline geldiyse ve dosya adına zaman formatı eklenmeden mevcut pcap dosyasının üzerine yazılır.

Örneğin, şunu deneyin:

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

Sonuçta tekrar trace.pcap0tekrar yazılıyor.

Yorumda önerildiği gibi, dosya adına zaman biçimlendirmesi eklerseniz, o zaman ve her büyüyen dosya listesi ile sonuçlanırsınız.

Bu nedenle, basit boyutlu sınırlı dosyalara bağlı kalmam gerekti:

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

0

Evet, MariusMatutiae'nin cevabının dediği gibi çalışmıyor .

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

En erken zaman damgasına sahip olduğu ve 100MB'den çok daha küçük olduğu -C 100için 30 dakikalık bir sürede mümkün olduğunca çok MB dosyası yakalayabiliyor gibi httpdebug.pcap03görünüyor, bu yüzden 30 dakikalık bir işaretle kesilmiş gibi görünüyor. 30 dakikaya ulaştığında, httpdebug.pcap00100MB'ye çarptığında sayıya geri dönüyor ve sayıyı artırıyor gibi görünüyor . Bu, 30 dakikalık bir süre içinde çok fazla isteğiniz varsa, çok yüksek httpdebug.pcapXX numaralarına ulaşacağınız anlamına gelir. Artık bir süre içinde bu kadar çok isteğe ulaşmazsanız, bu yüksek httpdebug.pcapXX numaralarının üzerine yazılmaz.

Bence zaman dilimi başına döngüsel dosyalar zaman dilimi anlamına gelir -G 1800ve her döngü -G 1800ve her artış olacaktır anlamına gelir -C 100.

-W 48Etkilip etkilemediğinden emin değilim , ama belki de httpdebug.pcap47(sayım 0'da başlar), paketleri yakalamayı durduracaktır.


Kısa bir süre önce, kafa karıştırıcı ifadelerle ilgili bir GitHub sorunu vardı . Uygulamayı değiştirmediler, ancak belgeleri biraz daha açık hale getirmeye çalıştılar.

Önerilen değişiklikler üzerinde devrinden Jan 28, 2019 .

Bugün, 17 Mart 2019 itibariyle mevcut belgeler:

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

Hala biraz kafa karıştırıcı olduğunu düşünüyorum, ancak yukarıdaki sonuçtan farkı tahmin ediyorum, bununla birlikte -Wkullanıldığında -C -Gdosya adından başka bir şey etkilemediğini söylüyor .

Genel olarak, -Wdosya sayısını sınırlamak için kullanılır. Bu yüzden süresiz olarak yakalamak istiyorsanız kullanmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.