为什么 tcpdump 输出文件为空?

为什么 tcpdump 输出文件为空?

在我使用该选项将捕获保存到文件Red Hat Enterprise Linux Server release 6.5时,生成的文件为空:tcpdump-w

[root@plop ~]# tcpdump -n -w tcpdump.cap
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C217 packets captured
217 packets received by filter
0 packets dropped by kernel
[root@plop ~]# cat tcpdump.cap
[root@plop ~]# ll tcpdump.cap
-rw-r-----. 1 root root 0 Aug 25 14:13 tcpdump.cap
[root@plop ~]#

>我还尝试使用and重定向命令的输出&>,但我总是得到一个空文件......

这可能是什么原因呢?

注意:

  • 当不重定向到文件时,我可以在终端中看到正确的输出(许多数据包)
  • 我做了同样的事情thsark,它按预期工作(输出文件是正确的)
  • 的版本tcpdumptcpdump version 4.1-PRE-CVS_2012_02_01
  • 的版本libpcaplibpcap version 1.4.0
  • 我尝试了-U该选项,但问题并未得到解决。

答案1

尝试添加该-U选项。

从手册页:

   -U
   --packet-buffered
          If  the  -w option is not specified, make the printed packet output ``packet-buffered''; i.e., as the description of the contents of each packet is printed, it will be written to the standard
          output, rather than, when not writing to a terminal, being written only when the output buffer fills.

      If the -w option is specified, make the saved raw packet output ``packet-buffered''; i.e., as each packet is saved, it will be written to the output file, rather than being written only  when
      the output buffer fills.

      The -U flag will not be supported if tcpdump was built with an older version of libpcap that lacks the pcap_dump_flush() function.

答案2

有一个已知问题,tcpdump如果它无法写入输出文件(例如权限或磁盘已满),它不会报告这一事实。

在这种情况下,由于输出文件正在正常创建,但没有写入数据,因此文件系统可能已满。

strace可以通过重新运行 via并观察写入失败来确认。

解决方案是清除相关文件系统中的空间或指向tcpdump存在空间的文件系统。

答案3

我使用了这个cmd: sudo tcpdump -v -w ~/Desktop/tout_135.pcap -i eth0 主机 10.211.55.*

并且生成的文件没有任何数据,只有 chmod 700 或您想要授予权限的任何内容。再次运行 tcpdump,瞧!数据生成了!

答案4

确保tcpdump正在观看正确的网络接口。或者用于-i any在任何界面上观看。

相关内容