Tại sao tcpdump không viết một tập tin pcap?


8

Trong quá trình gỡ lỗi một bot irc python dường như không thể kết nối, tôi nghĩ rằng "Tôi biết, tôi sẽ chỉ giải mã nó và xem nó đang làm gì." Vì vậy, tôi đã chạy tcpdump như tôi thường làm và nó nói rằng đó là các gói bị bắt, nhưng thực tế không ghi tệp cap.

akraut@lance ~/pcaps $ sudo tcpdump -w pyhole -s 0 "port 6667"
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C17 packets captured
17 packets received by filter
0 packets dropped by kernel
4294966881 packets dropped by interface
akraut@lance ~/pcaps $ ls -la
total 8
drwxr-xr-x 2 akraut akraut 4096 Feb  6 11:50 .
drwxr-xr-x 8 akraut akraut 4096 Feb  6 11:50 ..
akraut@lance ~/pcaps $ 

Điều gì xảy ra nếu bạn cho nó một con đường tuyệt đối?
Massimo

Là bot kết nối trên eth0? Nếu nó sử dụng loopback hoặc giao diện khác, sẽ không có bất kỳ lưu lượng nào để đổ vào tệp.
Chris S

1
@ Chris-s Nếu nó hiển thị 17 packets received by filterkhông có nghĩa là nó đã chiếm được một số lưu lượng truy cập?
akraut

@Massimo Đã thử chỉ định cả ./blah và / blah và không viết một tập tin.
akraut

Câu trả lời:


11

Bạn có thể muốn kiểm tra hành vi của tcpdump với strace, để xem liệu nó có làm điều gì kỳ quặc như chroot không, nếu đó là trong gentoo hoặc một bản phân phối khác có thể kiện các nhị phân.


À, vâng. Nhìn vào ebuild, nó dường như thả tư nhân và chroot vào /var/lib/tcpdump. Và lo, có tất cả các tập tin cap của tôi.
akraut

10

Ok, tôi đã giải quyết được bí ẩn. Theo cùng với tôi khi chúng tôi làm sáng tỏ TCPDump của Funtoo và Bí ẩn về tệp pcap bị thiếu .

Tôi đã sử dụng strace để xem những gì đang xảy ra và các dòng có liên quan là:

chroot("/var/lib/tcpdump")              = 0
chdir("/")                              = 0
--- SNIP ---
open("/tmp/lol.wat", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)

Vì thế...

lance ~ # ls /var/lib/tcpdump/
blah  blah.cap  irc.cap  pyhole

Này này! Tất cả các tập tin cap tôi đã cố gắng để tạo ra!

Sau khi xem các cờ sử dụng tcpdump được xây dựng theo mặc định, tôi thấy điều này:

lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges

Vậy tại sao làm theo cách này? Lý thuyết của tôi đi một cái gì đó như thế này:

  1. Nhiều ứng dụng tương tác với lưu lượng mạng thô phải chạy bằng root.
  2. Lưu lượng truy cập mạng thô có nhiều giá trị hợp lệ và không hợp lệ trong tự nhiên.
  3. Nhiều khai thác tồn tại cho các ứng dụng đó. (Wireshark, Ethereal, tcpdump, et al)
  4. Do đó, tcpdump lấy quyền truy cập vào giao diện mạng trong khi root, tự cắm vào /var/lib/tcpdump, sau đó bỏ các đặc quyền gốc và bắt đầu chụp.

Kết quả là, khi tôi chỉ định ./blahhoặc blahnó hoạt động tốt. Nhưng /tmp/blahkhông phải vì /var/lib/tcpdump/tmpkhông tồn tại.

Một tính năng phụ của tất cả những điều này là: khi sử dụng cờ suid để cài đặt tcpdump SetUID, bạn có thể cấp cho người dùng quyền truy cập với tcpdumpnhóm mà không cho họ quyền truy cập sudo hoặc root. Sử dụng có thể bao gồm một hộp chụp cho các kỹ sư hoặc nhà nghiên cứu mạng của bạn.

Tôi chỉ ước Gentoo / Funtoo sẽ có một thông báo về cài đặt cho biết tất cả điều này.

tl; dr: Gentoo / Funtoo đặt các tệp pcap của bạn vào /var/lib/tcpdump.


3

Cú pháp là chính xác: Tôi vừa thử nó (mặc dù trên cổng 80) và nó đã tạo ra một tệp pcap trong thư mục làm việc hiện tại, đưa ra các tùy chọn tương tự mà bạn đang sử dụng.

Nó có thể có một cái gì đó để làm với thư mục chính của bạn, mà bạn đang cố gắng viết vào thư mục gốc (vì sudo)? Có thể bạn đang sử dụng các thư mục nhà gắn trên NFS với root-squashing? sudo touch ~akraut/pcaps/foo?

Bạn có thể thử viết pcap thành / tmp / hoặc cái gì đó không?


Với sudo tcpdump -w /tmp/blah -s 0 "port 6667"nó có vẻ như nó hoạt động, nhưng nếu tôi làm sudo su -trước thì chạy tcpdump -w /tmp/blah -s 0 "port 6667"dưới quyền root thì nó báo "Không có tệp hoặc thư mục như vậy". Các thục hơn bí ẩn ...
akraut

1
Có vẻ như Justin đã giúp bạn tìm ra câu trả lời. Tôi có thể hỏi bạn bản phân phối nào bạn đang sử dụng không và liệu đó có phải là bản cài đặt tcpdump tiêu chuẩn cho bản phân phối đó không?
cjc

Tôi đang chạy Funtoo, một biến thể của Gentoo. Có, theo mặc định, nó đặt cờ "sử dụng" chroot (một phương pháp Gentoo để bật / tắt chức năng thời gian biên dịch tùy chọn). Tôi thực sự đã chuẩn bị một bài viết dài hơn để đăng ở đây.
akraut
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.