我一直在使用 tcpdump(版本 4.1.1)尝试从airmon-ng设置的监控模式接口捕获无线帧。我说“尝试”是因为到目前为止还没有发生任何事情。这很奇怪:
tcpdump -i mon0
上面的命令工作正常。我看到所有的信标和探测请求以及所有其他可以想象的帧都显示在我的屏幕上。但是,当我尝试使用将输出写入捕获文件时
tcpdump -i mon0 -w captures.cap
绝对没有任何东西被捕获,包括包含实际数据的第 3 层数据包。当我杀死 tcpdump 时,它给了我
13507 packets captured
13507 packets received by filter
0 packets dropped by kernel
(在这种情况下,13507 是一个任意数字)和一个完全空的捕获文件。
但是,当我在同一界面上使用 tshark 或 wireshark 执行捕获时,帧被捕获到文件中没有任何问题。
我更喜欢使用 tcpdump 而不是 wireshark,因为它没有 GUI 的开销,并且它具有“-z”选项,允许我获取捕获文件并将其传递给 shell 脚本,该脚本将其复制到另一台计算机在我的网络上。tshark 或 wireshark 没有类似的功能,我非常想避免编写程序来检查捕获文件的存在。
我对 tcpdump 的工作方式有根本的误解,还是这里肯定发生了一些奇怪的事情?是否有更好的方法来做我正在做的事情,或者我将不得不编写自己的基于 libpcap 的捕获程序?