tcpdump - xoay tệp chụp bằng -G, -W và -C


12

Tôi đang tìm cách có thể chụp đầu ra tcpdump xoay, thu được dữ liệu trị giá 30 phút, thành 48 tệp, theo chu kỳ.

Trang người đàn ông ngụ ý điều này là có thể, nhưng thử nghiệm của tôi dường như không tạo ra kết quả mà tôi đang tìm kiếm:

-W

      Được sử dụng cùng với -Ctùy chọn, điều này sẽ giới hạn số lượng tệp được tạo ở số lượng được chỉ định và bắt đầu ghi đè các tệp từ đầu, do đó tạo ra bộ đệm 'xoay'. Ngoài ra, nó sẽ đặt tên cho các tệp có đủ số 0 đứng đầu để hỗ trợ số lượng tệp tối đa, cho phép chúng sắp xếp chính xác.

      Được sử dụng cùng với -Gtùy chọn, điều này sẽ giới hạn số lượng tệp kết xuất được xoay được tạo, thoát với trạng thái 0 khi đạt đến giới hạn. Nếu được sử dụng cùng -C, hành vi sẽ dẫn đến các tệp theo chu kỳ trên mỗi lần.

Tôi đang chạy ứng dụng này trên các máy khách OS X 10.9.5 / 10.10.3. Đây là lệnh thử nghiệm; nó chỉ thoát sau tập tin thứ 3:

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

vui lòng xem câu trả lời của tôi
MariusMatutiae

Câu trả lời:


13

Đó là bởi vì bạn đã viết -W 3thay vì -W 48. Tuy nhiên, có những lỗi khác trong lệnh của bạn.

Tùy chọn này -Gcó nghĩa là:

-G rotate_seconds

      Nếu được chỉ định, xoay tệp kết xuất được chỉ định với -wtùy chọn mỗi lần xoay giây. Savefiles sẽ có tên được chỉ định theo -wđó sẽ bao gồm định dạng thời gian như được xác định bởi strftime (3). Nếu không có định dạng thời gian được chỉ định, mỗi tệp mới sẽ ghi đè lên trước đó.

      Nếu được sử dụng cùng với -Ctùy chọn, tên tệp sẽ có dạng ' tệp <Count>'.

Vì bạn đã viết -G 3, bạn sẽ xoay cái này cứ sau 3 giây, trong khi bạn nói

... trong đó thu thập dữ liệu trị giá 30 phút

Ngoài ra, sơ đồ đặt tên là sai: từ trên,

Nếu được sử dụng cùng với -Ctùy chọn, tên tệp sẽ có dạng ' tệp <Count>'.

Do đó, không có điểm nào trong việc chỉ định định dạng thời gian cho tên.

Hơn nữa, -Ctùy chọn không có đối số, trong khi, theo trang man , nó nên:

tcpdump [  -AdDefIKlLnNOpqRStuUvxX  ] [  -B  BUFFER_SIZE  ] [  -c  count  ]
C  FILE_SIZESEPARATOR  ] [  -G  rotate_seconds  ] [  -F  tập tin  ] [  -I  interface  ] [  -m  mô-đun  ] [  -M  bí mật  ] [  -r  tập  ] [  -s  snaplen  ] [  -T  type  ] [  -w  file  ] [  -W  filecount  ] [  -E  spi @ ipaddr algo: bí mật, ... ] [  -y  datalinktype  ] [  -z  postrotate-lệnh  ] [  -Z  user  ] [  biểu thức  ]

Các trang người đàn ông bang:

-C

      Trước khi ghi gói thô vào tệp lưu trữ, hãy kiểm tra xem tệp hiện có lớn hơn tệp_s_size hay không và nếu có, hãy đóng tệp lưu trữ hiện tại và mở tệp mới. Savefiles sau lần lưu đầu tiên sẽ có tên được chỉ định với -wcờ, với một số sau nó, bắt đầu từ 1 và tiếp tục đi lên. Đơn vị của file_size là hàng triệu byte (1.000.000 byte, không phải 1.048.576 byte).

Vì vậy, bạn nên chỉ định -C 100để tạo ra các tệp 100 MB.

Cuối cùng, lệnh của bạn phải là:

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

Thao tác này sẽ xoay các tệp (của tên track1, track2, ...) theo chu kỳ, với chu kỳ 48, cứ sau 1800 giây (= 30 phút) hoặc cứ sau 100 MB, tùy theo điều kiện nào đến trước.


Câu trả lời cuối cùng là thiếu điều kiện If no time format is specified, each new file will overwrite the previous.(Tôi đã cập nhật câu trả lời.)
okwap

2
@okwap, khi bạn chỉnh sửa câu trả lời (để thêm -% Y-% m-% d_% H:% M:% S), bạn đã phá vỡ phần chu kỳ của việc sử dụng -G, -C và -W cùng nhau. Câu trả lời ban đầu sử dụng just / var / tmp / track cho tên tệp -w là chính xác và tạo ra các đầu ra theo chu kỳ dự định như được mô tả (track1, track2, ...). Khi sử dụng -G, -C và -W cùng nhau, bạn không thể sử dụng định dạng strftime trong tên tệp và vẫn nhận được các đầu ra theo chu kỳ. Với chỉnh sửa của bạn, tcpdump sẽ tiếp tục viết ra các tệp không theo chu kỳ vì tên tệp không bao giờ lặp lại.
Bill Menees 8/11/2016

@BillMenees Cảm ơn bạn đã chú ý đến điều này, tôi đã hoàn tác chỉnh sửa của okwap.
MariusMatutiae

Giống như Swinster trong bình luận bên dưới, tôi lưu ý rằng câu trả lời này không tạo ra hành vi mong đợi. Sử dụng kết hợp -w -W -C và -G làm cho cùng một tệp bị ghi đè lặp đi lặp lại. Nó không khiến cho một số tệp được tạo bằng -W <n> như người ta mong đợi.
Niels2000

6

Mở rộng theo câu trả lời của flabdablet (thay đổi -G 1800thành -G 300- xoay vòng năm phút một lần - chỉ nhằm mục đích thử nghiệm),

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

sẽ cung cấp cho bạn %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of day, dẫn đến

/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

Rất hữu ích để tổ chức các dấu vết cho những vấn đề không liên tục phiền phức. Ngoài ra, nếu bạn không root, bạn có thể muốn sudovà dĩ nhiên làm cho nó không hoạt động:

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

3

Dường như với tôi rằng tất cả những gì bạn cần là

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

Trình xác định định dạng strftime mà -G mong đợi trong tên tệp -w không phải biểu thị ngày và giờ hoàn chỉnh. Chỉ với% H và% M trong đó và thời gian xoay chính xác là nửa giờ, bất kỳ lệnh gọi tcpdump nào sẽ chỉ tạo ra hai giá trị% M khác nhau cách nhau nửa giờ và các tệp theo dõi của ngày hôm qua sẽ bị ghi đè khi cùng giờ và số phút cuộn xung quanh một lần nữa.


1

Sau một số thử nghiệm, tôi không thể nhận được câu trả lời @MariusMatutiae để hoạt động như mong đợi. Nếu thời gian trở thành yếu tố giới hạn và không có thêm định dạng thời gian vào tên tệp, thì tệp pcap hiện tại chỉ đơn giản là ghi đè.

Ví dụ: thử:

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

Tất cả bạn kết thúc với trace.pcap0được viết đi viết lại.

Như đã đề xuất trong bình luận, nếu bạn thêm định dạng thời gian vào tên tệp, thì bạn chỉ cần kết thúc với và danh sách các tệp đang phát triển.

Do đó, tôi đã phải sử dụng các tệp giới hạn kích thước đơn giản:

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

0

Vâng, nó dường như không hoạt động như câu trả lời của MariusMatutiae nói.

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

Theo tôi có vẻ như nó có thể thu được càng nhiều -C 100tệp MB càng tốt trong khoảng thời gian 30 phút vì httpdebug.pcap03có dấu thời gian sớm nhất và nó nhỏ hơn 100 MB, vì vậy có vẻ như nó đã bị cắt ở mốc 30 phút. Khi nó đạt 30 phút, nó dường như nhảy trở lại httpdebug.pcap00và tăng số khi nó đạt 100MB. Điều này có nghĩa là nếu bạn có nhiều yêu cầu trong khoảng thời gian 30 phút, bạn sẽ nhận được số httpdebug.pcapXX rất cao. Nếu bạn không bao giờ đạt được nhiều yêu cầu đó trong một khoảng thời gian nữa, những số httpdebug.pcapXX cao đó sẽ không bao giờ bị ghi đè.

Vì vậy, tôi nghĩ rằng các tệp theo chu kỳ trên mỗi lần có nghĩa là thời gian đó -G 1800và nó sẽ quay vòng theo từng -G 1800bước -C 100.

Tôi không chắc liệu có -W 48ảnh hưởng đến nó hay không, nhưng có lẽ nếu bạn nhận được httpdebug.pcap47(đếm bắt đầu từ 0`, nó sẽ ngừng bắt gói tin.


Gần đây, có một vấn đề GitHub được mở về từ ngữ khó hiểu. Họ đã không thay đổi việc thực hiện, nhưng họ đã cố gắng làm cho tài liệu rõ ràng hơn một chút.

Những thay đổi được đề xuất đã được hợp nhất vào ngày 28 tháng 1 năm 2019 .

Kể từ hôm nay, ngày 17 tháng 3 năm 2019, đây là tài liệu hiện tại:

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

Tôi vẫn nghĩ rằng nó hơi khó hiểu, nhưng tôi đoán sự khác biệt từ kết luận của tôi ở trên, là nó nói -Wkhi được sử dụng -C -Gkhông ảnh hưởng gì đến tên tệp.

Nói chung, -Wđược sử dụng để giới hạn số lượng tệp. Vì vậy, đừng sử dụng nó nếu bạn muốn chụp vô thời hạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.