tcpdump - หมุนไฟล์จับภาพโดยใช้ -G, -W และ -C


14

ฉันกำลังมองหาที่จะสามารถจับภาพเอาท์พุท tcpdump หมุนซึ่งจับข้อมูล 30 นาทีมูลค่าของเป็น 48 ไฟล์ cyclically

หน้าคนบอกเป็นนัยว่าควรเป็นไปได้ แต่การทดสอบของฉันดูเหมือนจะไม่ให้ผลลัพธ์ที่ฉันกำลังมองหา:

-W

      ใช้ร่วมกับ-Cตัวเลือกนี้จะ จำกัด จำนวนไฟล์ที่สร้างขึ้นเป็นจำนวนที่ระบุและเริ่มเขียนทับไฟล์ตั้งแต่ต้นจึงสร้างบัฟเฟอร์ 'หมุน' นอกจากนี้มันจะตั้งชื่อไฟล์ที่มีจำนวน 0 เพียงพอที่จะรองรับจำนวนไฟล์สูงสุดทำให้สามารถเรียงลำดับได้อย่างถูกต้อง

      ใช้ร่วมกับ-Gตัวเลือกนี้จะ จำกัด จำนวนของไฟล์ดัมพ์ที่หมุนที่สร้างขึ้นออกจากสถานะ 0 เมื่อถึงขีด จำกัด หากใช้พร้อม-Cเช่นกันพฤติกรรมจะส่งผลให้เกิดการหมุนเวียนไฟล์ต่อครั้ง

ฉันใช้สิ่งนี้กับลูกค้า OS X 10.9.5 / 10.10.3 นี่คือคำสั่งทดสอบ มันจะออกหลังจากไฟล์ที่ 3:

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

กรุณาดูคำตอบของฉัน
MariusMatutiae

คำตอบ:


13

นั่นเป็นเพราะคุณเขียนแทน-W 3 -W 48อย่างไรก็ตามมีข้อผิดพลาดอื่น ๆ ในคำสั่งของคุณ

ตัวเลือก-Gหมายถึง:

-G rotate_seconds

      หากระบุให้หมุนไฟล์ดัมพ์ที่ระบุพร้อมกับ-wตัวเลือกทุกๆrotate_secondsวินาที Savefiles จะมีชื่อที่ระบุ-wซึ่งควรมีรูปแบบเวลาตามที่กำหนดโดย strftime (3) หากไม่ได้ระบุรูปแบบเวลาไฟล์ใหม่แต่ละไฟล์จะเขียนทับไฟล์ก่อนหน้า

      หากใช้ร่วมกับ-Cตัวเลือกชื่อไฟล์จะอยู่ในรูปของ ' file <count>'

เมื่อคุณเขียน-G 3คุณจะหมุนมันทุก 3 วินาทีในขณะที่คุณระบุ

... ซึ่งเก็บข้อมูลได้ 30 นาที

นอกจากนี้รูปแบบการตั้งชื่อไม่ถูกต้อง: จากด้านบน

หากใช้ร่วมกับ-Cตัวเลือกชื่อไฟล์จะอยู่ในรูปของ ' file <count>'

ดังนั้นจึงไม่มีประเด็นในการระบุรูปแบบเวลาสำหรับชื่อ

นอกจากนี้-Cตัวเลือกไม่มีข้อโต้แย้งในขณะที่ตามหน้า manก็ควร:

tcpdump [  -AdDefIKlLnNOpqRStuUvxX  ] [  -B  buffer_size  ] [  -c  นับ  ]
-C  FILE_SIZE  ] [  -G  rotate_seconds  ] [  -F  ไฟล์  ] [  -I  อินเตอร์เฟซ  ] [  -m  โมดูล  ] [  -M  ลับ  ] [  -r  ไฟล์  ] [  -s  snaplen  ] [  -T  type  ] [  -w  file  ] [  -W  filecount  ] [  -E  spi @ ipaddr algo: secret, ... ] [  -y  datalinktype  ] [  -z  postrotate-command  ] [  ผู้ใช้-Z   ] [  นิพจน์  ]

หน้าคนฯ :

-C

      ก่อนที่จะเขียนแพ็กเก็ต raw ไปยัง savefile ให้ตรวจสอบว่าไฟล์มีขนาดใหญ่กว่าfile_size หรือไม่และถ้าเป็นเช่นนั้นให้ปิด savefile ปัจจุบันและเปิดใหม่ Savefiles หลังจาก savefile แรกจะมีชื่อที่ระบุพร้อมกับ-wแฟล็กโดยมีตัวเลขอยู่หลังเริ่มต้นที่ 1 และดำเนินการต่อไป หน่วยของfile_sizeคือล้านไบต์ (1,000,000 ไบต์ไม่ใช่ 1,048,576 ไบต์)

ดังนั้นคุณควรระบุ-C 100เพื่อผลิตไฟล์ 100 MB

ในที่สุดคำสั่งของคุณควรจะ:

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

สิ่งนี้จะหมุนเวียนไฟล์ (ของชื่อ trace1, trace2, ... ) ตามรอบเวลาด้วย 48 ระยะเวลาทุก 1800 วินาที (= 30 นาที) หรือทุกๆ 100 MB แล้วแต่ว่าจะถึงอย่างใดก่อน


คำตอบสุดท้ายจะหายไปจากเงื่อนไขIf no time format is specified, each new file will overwrite the previous.(ฉันได้อัปเดตคำตอบแล้ว)
okwap

2
@okwap เมื่อคุณแก้ไขคำตอบ (เพื่อเพิ่ม -% Y-% m-% d_% H:% M:% S) คุณทำลายส่วนวงจรของการใช้ -G, -C และ -W ด้วยกัน คำตอบดั้งเดิมโดยใช้ just / var / tmp / trace สำหรับ -w ชื่อไฟล์นั้นถูกต้องและสร้างเอาต์พุต cyclic ตามที่อธิบายไว้ (trace1, trace2, ... ) เมื่อใช้ -G, -C และ -W ร่วมกันคุณจะไม่สามารถใช้รูปแบบ strftime ในชื่อไฟล์และยังคงได้รับเอาต์พุตแบบวนซ้ำ ด้วยการแก้ไขของคุณ tcpdump จะเขียนไฟล์ต่อไปแบบไม่ต่อเนื่องเพราะชื่อไฟล์จะไม่ซ้ำ
Bill Menees

@BillMenees ขอบคุณที่แจ้งให้ฉันทราบฉันได้ยกเลิกการแก้ไข okwap
MariusMatutiae

เช่นเดียวกับ Swinster ในความคิดเห็นด้านล่างฉันทราบว่าคำตอบนี้ไม่ได้ทำให้เกิดพฤติกรรมที่คาดหวัง การใช้ -w -W -C และ -G ร่วมทำให้ไฟล์เดียวกันถูกเขียนทับซ้ำแล้วซ้ำอีก มันไม่ได้ทำให้จำนวนของไฟล์ที่จะถูกสร้างขึ้นเท่ากับ -W <n> เป็นหนึ่งคาดหวัง
Niels2000

6

ขยายคำตอบของ flabdablet (เปลี่ยน-G 1800เป็น-G 300- หมุนทุกห้านาที - เพียงเพื่อจุดประสงค์ในการทดสอบ)

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

จะทำให้คุณ%m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of dayผลในการ

/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

มีประโยชน์มากสำหรับการจัดระเบียบร่องรอยสำหรับปัญหาที่น่ารำคาญเป็นระยะ ๆ นอกจากนี้หากคุณไม่รูทคุณอาจต้องการsudoทำให้แน่นอนว่า:

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

3

ดูเหมือนว่าทุกสิ่งที่คุณต้องการคือ

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

ตัวระบุรูปแบบ strftime ที่ -G คาดว่าจะอยู่ในชื่อไฟล์ -w ไม่จำเป็นต้องแสดงวันที่และเวลาที่สมบูรณ์ ด้วยเพียง% H และ% M ในนั้นและเวลาหมุนรอบครึ่งชั่วโมงการเรียกใช้ tcpdump ใด ๆ ที่กำหนดจะสร้างค่า% M ที่แตกต่างกันสองค่าครึ่งชั่วโมงแยกจากกันและไฟล์การติดตามของเมื่อวานนี้จะถูกเขียนทับเมื่อชั่วโมงเดียวกัน และตัวเลขนาทีหมุนอีกครั้ง


1

หลังจากการทดลองฉันไม่สามารถรับคำตอบ @MariusMatutiae ได้ตามที่คาดไว้ หากเวลากลายเป็นปัจจัย จำกัด และไม่มีการเพิ่มรูปแบบเวลาลงในชื่อไฟล์ไฟล์ pcap ปัจจุบันจะถูกเขียนทับ

ตัวอย่างเช่นลอง:

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

สิ่งที่คุณจบลงคือtrace.pcap0การเขียนซ้ำไปซ้ำมา

ตามที่แนะนำไว้ในความคิดเห็นหากคุณเพิ่มการจัดรูปแบบเวลาไปยังชื่อไฟล์คุณก็จะจบลงด้วยทุก ๆ ไฟล์ที่เพิ่มขึ้น

ดังนั้นฉันต้องติดกับไฟล์ที่ จำกัด ขนาดง่าย ๆ :

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

0

ใช่มันไม่ทำงานตามคำตอบของ 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

ฉันคิดว่ามันน่าจะจับ-C 100ไฟล์ MB ได้มากที่สุดในช่วง 30 นาทีเพราะhttpdebug.pcap03มีการประทับเวลาที่เร็วที่สุดและมีขนาดเล็กกว่า 100MB ดังนั้นดูเหมือนว่ามันจะถูกตัดทิ้งที่เครื่องหมาย 30 นาที เมื่อมันมาถึง 30 นาทีดูเหมือนว่าจะย้อนกลับไปhttpdebug.pcap00และเพิ่มจำนวนเมื่อถึง 100MB ซึ่งหมายความว่าหากคุณมีคำขอจำนวนมากในช่วงเวลา 30 นาทีคุณจะได้รับหมายเลข httpdebug.pcapXX ที่สูงมาก หากคุณไม่เคยได้รับการร้องขอจำนวนมากในช่วงเวลาหนึ่งอีกต่อไปหมายเลข httpdebug.pcapXX ที่สูงเหล่านั้นจะไม่ถูกเขียนทับ

ดังนั้นฉันคิดว่าไฟล์วัฏจักรต่อ timesliceหมายความว่า timeslice เป็น-G 1800และมันจะวงจรทุกและเพิ่มขึ้นทุก-G 1800-C 100

ฉันไม่แน่ใจว่า-W 48จะส่งผลกระทบกับมันหรือเปล่าแต่ถ้าคุณไปถึงhttpdebug.pcap47(จำนวนเริ่มต้นที่ 0` มันจะหยุดการจับแพ็คเก็ต


ค่อนข้างเมื่อเร็ว ๆ นี้มีปัญหา GitHub ที่เปิดเกี่ยวกับถ้อยคำที่สับสน พวกเขาไม่ได้เปลี่ยนการใช้งาน แต่พวกเขาพยายามทำให้เอกสารชัดเจนขึ้นเล็กน้อย

เปลี่ยนแปลงที่เสนอรวมใน28 มกราคม 2019

ณ วันนี้วันที่ 17 มีนาคม 2019 นี่คือเอกสารปัจจุบัน:

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

ฉันยังคิดว่ามันสับสนเล็กน้อย แต่ฉันเดาว่าความแตกต่างจากข้อสรุปข้างต้นคือมันบอกว่า-Wเมื่อใช้กับ-C -Gไม่มีผลกระทบอะไรนอกจากชื่อไฟล์

โดยทั่วไป-Wจะใช้สำหรับ จำกัด จำนวนไฟล์ ดังนั้นอย่าใช้มันหากคุณต้องการถ่ายภาพอย่างไม่มีกำหนด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.