В процессе отладки бота 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
Так почему это так? Моя теория выглядит примерно так:
/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 / или что-то в этом роде?