我需要整晚运行 Wireshark 来捕获来自某个 IP 地址的数据包。我注意到 Wireshark 运行的时间越长,它占用的 RAM 就越多,因为它会存储运行期间发现的所有数据包。对我来说有 3 个可能的解决方案,但我在网上找不到任何答案:
- 配置 Wireshark 以仅将通过过滤器出现的数据包(不是所有数据包)保存在 RAM 中。我不确定这是否可行。
- 配置 Wireshark 每小时自动将数据包保存到文件中,并在存储到文件后释放其内存。
- 使用设计为运行一段时间的 Wireshark 替代品。
答案1
对于 Windows 环境(比如我的环境,在服务器上安装 wireshark 是一件大事),自从 Win7/2008R2 以来,就已经有内置的数据包捕获功能可用。
这将捕获所有内容,直到你告诉它停止:
netsh trace start capture=yes persistent=yes tracefile=c:\temp\results.etl
监控踪迹:
netsh trace show status
停止跟踪:
netsh trace stop
它确实支持所有常用功能:过滤、循环日志记录,甚至可以在重启后继续使用。另一个优点是命令帮助:尝试netsh trace ?
或netsh trace show ?
您需要安装 Microsoft Message Analyzer 才能查看/导出结果。
对于您的情况,似乎可以使用以下命令进行设置:
netsh trace start capture=yes persistent=yes tracefile=c:\temp\results.etl maxSize=500
这将为您提供 500MB 文件的循环日志记录,并在重启后继续存在。
答案2
我总是只使用tcpdump
。Wireshark 可以稍后打开生成的捕获文件,但如果文件很大,您可能仍需要使用 之类的命令将其拆分editcap
。以下是一些示例:
捕获所有流量:
tcpdump -s 0 -n -w <filename>
捕获除 SSH 流量之外的所有流量(tcpdump
通过 SSH 连接运行时很有用):
tcpdump -s 0 'port not 22' -n -w <filename>
您需要该-s 0
参数,以便tcpdump
不施加每个数据包的限制。
您可能不需要-n
;我总是使用它,这样 Wireshark 就不会花时间尝试解析名称。(没有 可能会更有用-w
。)
答案3
死灵但......
Wireshark 至少从 2008 年开始就支持单独的捕获级别(libpcap 或 winpcap)和显示过滤器。捕获过滤器排除的数据包根本不会存储,也不会占用内存。捕获过滤器语法比 Wireshark 的显示过滤器语法更简单且功能更弱,但从(和/或到)IP 地址发送数据在其能力范围内。
这地点指定捕获过滤器的位置随时间而变化。在旧版本中,您必须双击捕获选项窗口中的接口;现在(或至少最近),它会出现在欢迎窗口和捕获选项窗口中的接口列表下。我思考这个变化发生在 2.0 版本,但我不敢保证。
在这种情况下,您似乎只需要捕获,而显示可以稍后进行。在这种情况下,Wireshark 长期以来一直有一个选项可以立即写入一个文件或一系列文件(基于时间间隔或数据量),如果您还关闭“实时更新列表”(单独的选项),它几乎不会占用那么多 RAM。(显然您需要磁盘空间来存放文件。)
这些选项也已移动。在旧版本中,它们始终显示在捕获选项窗口中(实际上它们占据了窗口下半部分的大部分空间,因此很难忽略它们);现在您必须转到捕获选项窗口的第二个和第三个选项卡。
Wireshark 软件包(包括 Windows 安装程序)还包括命令行版本
tshark[.exe]
。借助选项-w
和相关选项(如-b
和)-a
,tshark 同样能够捕获(可选捕获过滤和/或“显示”(!)过滤),直接捕获到文件或一系列文件,并且根本不显示,因此几乎不需要 RAM。您稍后可以将此文件(或每个/任何这些文件)读入完整版 Wireshark 中进行显示和分析。该选项与 tcpdump 类似
-w
(但不完全相同)。tshark 的其他模式——捕获并立即解码和显示;或者读取捕获文件并-r
解码和显示——基本与 tcpdump 类似,但显示方式相当不同。由于这是一个命令行程序,因此您需要阅读其手册页以获取详细说明。由于 Windows(10 + WSL 除外)没有手册页,因此 Windows 安装程序在 installdir (
\Program Files\Wireshark\tshark.html
) 中提供了一个 HTML 文件,该文件也可以从 GUI 程序(Wireshark)的 Help / ManualPages (!) 下访问。