tcpdump为什么不写pcap文件?


8

在调试似乎无法连接的python irc bot的过程中,我想:“我知道,我只是将其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 $ 

如果您给它一个绝对路径会怎样?
马西莫

机器人正在连接eth0吗?如果使用环回或其他接口,则不会有任何流量转储到文件中。
克里斯·S

1
@ Chris-s如果显示,17 packets received by filter这并不意味着它捕获了一些流量?
akraut 2012年

@Massimo尝试同时指定./blah和/ blah,但均未写入文件。
akraut 2012年

Answers:


11

您可能想检查带有strace的tcpdump的行为,以查看它是否正在执行诸如chrooting之类的奇怪操作,是否位于gentoo或其他可能包含二进制文件的发行版中。


是的。看一下ebuild,似乎将privs和chroot放到了/var/lib/tcpdump。瞧,我所有的帽盖都摆在那里。
akraut 2012年

10

好的,我解决了这个谜。跟着我一起解说Funtoo的TCPDump和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组的访问权限,而无需授予他们sudo或root访问权限。可能的用途包括为网络工程师或研究人员使用的捕获盒。

我只希望Gentoo / Funtoo在安装时收到一条消息,说明所有这些。

tl; dr:Gentoo / Funtoo将您的pcap文件放入/var/lib/tcpdump


3

语法是正确的:我只是尝试了它(尽管在端口80上),并且在给定您正在使用的相同选项的情况下,它在当前工作目录中生成了一个pcap文件。

它可能与您要作为root写入的主目录有关(由于sudo)?您是否可能正在使用NFS挂载的主目录进行根压缩? sudo touch ~akraut/pcaps/foo

您可以尝试将pcap写入/ tmp /吗?


有了sudo tcpdump -w /tmp/blah -s 0 "port 6667"它看起来就可以了,但是如果我先做sudo su -然后tcpdump -w /tmp/blah -s 0 "port 6667"以root身份运行,它会说“没有这样的文件或目录”。谜团加深了……
akraut 2012年

1
看起来贾斯汀(Justin)帮助您找到了答案。我可以问一下您正在使用哪个发行版,这是否是该发行版的标准tcpdump安装?
cjc 2012年

我正在运行Funtoo,它是Gentoo的一种变体。是的,默认情况下,它设置chroot“ use”标志(一种启用/禁用可选编译时功能的Gentoo方法)。实际上,我已经准备了更长的文章,很快就会在这里发布。
akraut 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.