2014-09-08 14 views
17

Mỗi lần, khi tôi chạy thủ công tcpdump, tôi phải sử dụng Ctrl + C để dừng nó. Bây giờ tôi muốn lên lịch tcpdump với cronjob và tôi chỉ cần nó chạy trong 1 tiếng rưỡi. Nếu không chạy theo cách thủ công Ctrl + C hoặc lệnh giết, làm thế nào nó có thể tự động dừng lại? Đây là lệnh tôi đang thử nghiệm:cách lên lịch tcpdump để chạy trong khoảng thời gian cụ thể?

tcpdump -i eth0 'port 8080' -w myfile 

tôi có thể sắp xếp một cronjob để giết chết quá trình tcpdump, nhưng nó không có vẻ như một ý tưởng tốt.

+0

một trong các câu trả lời cho tcpdump; một giải pháp hoạt động cho bất kỳ chương trình nào (trừ khi chúng fiddle với SIGALRM) là chương trình sigalarm từ http://www.superscript.com/signal/index.html – loreb

Trả lời

33

Bạn có thể kết hợp -G {sec} (xoay các tập tin dump mỗi x giây) và -W {count} (giới hạn # của tập tin dump) để có được những gì bạn muốn:

tcpdump -G 15 -W 1 -w myfile -i eth0 'port 8080' 

sẽ chạy trong 15 giây và sau đó dừng lại. Biến 1,5 giờ thành giây và nó sẽ hoạt động.

+0

cảm ơn rất nhiều, công trình này! – Gary

+0

tuyệt vời !!! :) Cảm ơn –

+15

Lưu ý: mẹo này không hoạt động nếu bạn không nhận được bất kỳ lưu lượng truy cập nào. – nibot

11

Bạn có thể làm điều đó như thế này:

tcpdump -i eth0 'port 8080' -w myfile & 
pid=$! 
sleep 1.5h 
kill $pid 
+0

điều này cũng tốt và linh hoạt! Cảm ơn rất nhiều! – Gary

4

Phương pháp mà làm việc tốt nhất cho tôi trên Ubuntu 14,04

sudo -i 
crontab -e 

và sau đó thêm dòng

30 17 * * * /usr/sbin/tcpdump -G 12600 -W 1 -s 3000 -w /home/ubuntu/capture-file.pcap port 5060 or portrange 10000-35000 

Ghi chú

  • -G cờ chỉ số thứ hai để tống ra để chạy, ví dụ này chạy hàng ngày 17:30-21:00
  • -W là số lần lặp tcpdump sẽ thực hiện
  • Cron công việc sẽ không được thêm đến khi bạn lưu và thoát khỏi các tập tin
  • Ví dụ này là để chụp các gói tin của một máy chủ điện thoại Asterisk
19

bạn có thể sử dụng thời gian chờ

timeout 5400 tcpdump -i eth0 'port 8080' -w myfile 
Các vấn đề liên quan