Назад | Перейти на главную страницу

Почему tcpdump не записывает файл pcap?

В процессе отладки бота irc на python, который, похоже, не может подключиться, я подумал: «Я знаю, я просто сделаю tcpdump и посмотрю, что он делает». Итак, я запустил tcpdump, как обычно, и он говорит, что это захваченные пакеты, но на самом деле не записывает файл 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 $ 

Возможно, вы захотите проверить поведение tcpdump с помощью strace, чтобы увидеть, не делает ли он что-нибудь странное, например, chroot, находится ли он в gentoo или другом дистрибутиве, который может удовлетворить двоичные файлы.

Хорошо, я разгадал загадку. Следуй за мной, пока мы распутываемся TCPDump от Funtoo и тайна отсутствующего файла pcap.

Я использовал strace, чтобы увидеть, что происходит, и соответствующие строки:

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)

Так...

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

Эй смотри! Все файлы шапки я пытался создать!

Посмотрев на флаги использования, с которыми tcpdump собирается по умолчанию, я вижу следующее:

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

Так почему это так? Моя теория выглядит примерно так:

  1. Многие приложения, взаимодействующие с необработанным сетевым трафиком, должны запускаться от имени пользователя root.
  2. Необработанный сетевой трафик имеет множество допустимых и недопустимых значений в дикой природе.
  3. Для этих приложений существует множество эксплойтов. (Wireshark, Ethereal, tcpdump и др.)
  4. Таким образом, tcpdump получает доступ к сетевому интерфейсу в то время как root, запирает себя в /var/lib/tcpdump, затем отбрасывает привилегии root и начинает захват.

В результате, когда я указал ./blah или blah он работал нормально. Но /tmp/blah не сделал, потому что /var/lib/tcpdump/tmp не существует.

Изящная сторона всего этого: при использовании флага suid для установки tcpdump SetUID вы можете предоставить пользователям доступ с помощью tcpdump group, не давая им sudo или root-доступ. Возможные варианты использования включают поле захвата для сетевых инженеров или исследователей.

Я просто хочу, чтобы у Gentoo / Funtoo было сообщение об установке, в котором говорилось бы все это.

tl; dr: Gentoo / Funtoo поместите ваши файлы pcap в /var/lib/tcpdump.

Синтаксис правильный: я просто попробовал его (хотя и на порту 80), и он сгенерировал файл pcap в текущем рабочем каталоге, учитывая те же параметры, которые вы используете.

Может ли это иметь какое-то отношение к вашему домашнему каталогу, в который вы пытаетесь писать как root (из-за sudo)? Возможно ли, что вы используете домашние каталоги, смонтированные по NFS, с подавлением root-прав? sudo touch ~akraut/pcaps/foo ?

Вы можете попробовать записать pcap в / tmp / или что-то в этом роде?