如何连续运行 Wireshark 而不耗尽所有 RAM?

如何连续运行 Wireshark 而不耗尽所有 RAM?

我需要整晚运行 Wireshark 来捕获来自某个 IP 地址的数据包。我注意到 Wireshark 运行的时间越长,它占用的 RAM 就越多,因为它会存储运行期间发现的所有数据包。对我来说有 3 个可能的解决方案,但我在网上找不到任何答案:

  1. 配置 Wireshark 以仅将通过过滤器出现的数据包(不是所有数据包)保存在 RAM 中。我不确定这是否可行。
  2. 配置 Wireshark 每小时自动将数据包保存到文件中,并在存储到文件后释放其内存。
  3. 使用设计为运行一段时间的 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

死灵但......

  1. Wireshark 至少从 2008 年开始就支持单独的捕获级别(libpcap 或 winpcap)和显示过滤器。捕获过滤器排除的数据包根本不会存储,也不会占用内存。捕获过滤器语法比 Wireshark 的显示过滤器语法更简单且功能更弱,但从(和/或到)IP 地址发送数据在其能力范围内。

    地点指定捕获过滤器的位置随时间而变化。在旧版本中,您必须双击捕获选项窗口中的接口;现在(或至少最近),它会出现在欢迎窗口和捕获选项窗口中的接口列表下。我思考这个变化发生在 2.0 版本,但我不敢保证。

  2. 在这种情况下,您似乎只需要捕获,而显示可以稍后进行。在这种情况下,Wireshark 长期以来一直有一个选项可以立即写入一个文件或一系列文件(基于时间间隔或数据量),如果您还关闭“实时更新列表”(单独的选项),它几乎不会占用那么多 RAM。(显然您需要磁盘空间来存放文件。)

    这些选项也已移动。在旧版本中,它们始终显示在捕获选项窗口中(实际上它们占据了窗口下半部分的大部分空间,因此很难忽略它们);现在您必须转到捕获选项窗口的第二个和第三个选项卡。

  3. 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 (!) 下访问。

答案4

如果可能的话,避免捕获所有数据包。选择接口时,插入一个过滤器以覆盖您稍后要显示的数据包的超集。这将大大减少 Wireshark 的内存和磁盘使用量:

在此处输入图片描述

例如:过滤http数据包,输入tcp port http并开始捕获。

注意:这是Capture Filter在选择界面时应用的(这不是Display Filter)。

相关内容