为什么当输出写入控制台和文件时,tcpdump 捕获的数据包数量有如此大的差异?
$ tcpdump
...
1681 packets captured
1681 packets received by filter
0 packets dropped by kernel
对阵
# tcpdump > /root/dump.txt
...
11 packets captured
12 packets received by filter
0 packets dropped by kernel
在这两种情况下,我都在几秒钟后使用 Ctrl+C 终止了命令。
编辑:命令tcpdump -w /root/dump.txt
也只捕获了几个数据包。这种行为是一致的,我试过很多次。
答案1
是的,正如您所意识到的,tcpdump 的文本输出将通过您的 ssh 连接传输到您通过 ssh 登录到运行 tcpdump 的机器的主机,因此会被 tcpdump 捕获。使用-w
,tcpdump 不会打印每个数据包的任何内容,因此它不会通过网络传输(除非您将捕获的内容保存到从文件服务器(例如 NFS、SMB 或 AFP 服务器)安装的文件系统上的文件中)。
Wireshark 和 TShark 会尝试检测您是否正在通过 X11 运行 Wireshark 或通过 ssh 运行 TShark,如果是这样,则会在后台调整捕获过滤器以过滤掉运行它们的主机的 X11 或 ssh 流量。对于 tcpdump,您可能希望使用以下过滤器
not (host {host from which you're sshing} and port ssh)
或者,如果您已经在使用过滤器,并且将该过滤器与您正在使用的过滤器一起使用,以过滤掉您的 SSH 流量。