To proto, že jste napsali -W 3
místo -W 48
. Ve vašem příkazu jsou však další chyby.
Možnost -G
znamená:
-G rotate_seconds
Pokud je zadán, otočí soubor výpisu zadaný pomocí
-w
každou rotate_seconds sekundy. Uložené soubory budou mít název určený-w
který by měl obsahovat formát času definovaný pomocí strftime(3). Pokud není zadán žádný formát času, každý nový soubor přepíše předchozí.Pokud se použije ve spojení s
-C
možnost, budou mít názvy souborů tvar 'soubor'.
Protože jste napsali -G 3
, budete to otáčet každé 3 sekundy, dokud jste uvedli
...který zachytí data za 30 minut
Také schéma pojmenování je chybné:z výše uvedeného,
Pokud se použije ve spojení s
-C
možnost, budou mít názvy souborů tvar 'soubor'.
Nemá tedy smysl uvádět formát času pro jméno.
Dále -C
volba nemá žádný argument, zatímco podle manuálové stránky by měla:
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B velikost_bufferu ] [ -c počet ]
[ -C velikost_souboru ] [ -G rotate_seconds ] [ -F soubor ][ -I rozhraní ] [ -m modul ] [ -M tajné ][ -r soubor ] [ -s snaplen ] [ -T typ ] [ -w soubor ][ -W počet souborů ][ -E [email protected] algo:secret,... ][ -y typ datového odkazu ] [ -z postrotate-command ] [ -Z uživatel ] [ výraz ]
Manová stránka uvádí:
-C
Před zápisem nezpracovaného paketu do uloženého souboru zkontrolujte, zda je soubor aktuálně větší než velikost_souboru a pokud ano, zavřete aktuální uložený soubor a otevřete nový. Uložené soubory za prvním uloženým souborem budou mít název určený pomocí
-w
vlajka s číslem za ní, začínající na 1 a pokračující nahoru. Jednotky velikost_souboru jsou miliony bajtů (1 000 000 bajtů, nikoli 1 048 576 bajtů).
Měli byste tedy zadat -C 100
za účelem vytvoření 100 MB souborů.
Nakonec by váš příkaz měl být:
tcpdump -i en0 -w /var/tmp/trace -W 48 -G 1800 -C 100 -K -n
To bude cyklicky střídat soubory (s názvy trace1, trace2, ...) s periodou 48, buď každých 1800 sekund (=30 minut) nebo každých 100 MB, podle toho, co nastane dříve.
Rozšíření po odpovědi flabdabletu (změna -G 1800
na -G 300
–rotace každých pět minut –pouze pro účely testování),
tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300
vám dá %m=month
, %d=day of month
, %H=hour of day
, %M=minute of day
, %S=second of day
, %s=millisecond of day
, což má za následek
/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
Velmi užitečné pro organizování stop pro ty otravné občasné problémy. Také, pokud nejste root, možná budete chtít sudo
a samozřejmě to udělat nohup:
sudo bash -c "nohup tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300 &"
Zdá se mi, že vše, co potřebujete, je
tcpdump -i en0 -G 1800 -w /var/tmp/trace-%H-%M.pcap
Specifikátor formátu strftime, který -G očekává v názvu souboru -w, nemusí představovat úplné datum a čas. Pokud jsou tam pouze %H a %M a doba rotace přesně půl hodiny, každé dané vyvolání tcpdump vygeneruje pouze dvě různé hodnoty %M s půlhodinovým odstupem a včerejší trasovací soubory budou přepsány, když bude stejná hodina a čísla minut se znovu točily.