你如何连续运行Wireshark而不用吃掉所有的RAM?

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

  1. 将Wiresharkconfiguration为仅将通过filter出现的数据包(不是所有数据包)保存在RAM中。 我不确定这是否可能。
  2. 将Wiresharkconfiguration为每小时自动将数据包保存到文件,并在存储到文件后释放其内存。
  3. 使用Wireshark的替代方法来运行一段时间。

对于Windows环境(比如在服务器上安装wireshark是个大问题),从Win7 / 2008R2开始,就已经有了可用的数据包捕获。

这将捕获一切,直到你告诉它停止: netsh trace start capture=yes persistent=yes tracefile=c:\temp\results.etl

监视跟踪: netsh trace show status

停止跟踪: netsh trace stop

它确实支持所有常用的function:过滤,循环日志logging,甚至可以在重新启动时保留。 另一个加号是命令帮助:尝试netsh trace ?netsh trace show ? 您需要安装Microsoft消息分析器来查看/导出结果。

看起来像你的情况,你会被设置下面的命令:

netsh trace start capture=yes persistent=yes tracefile=c:\temp\results.etl maxSize=500

这将给你500MB文件的循环日志logging,并坚持重新启动。

我总是只使用tcpdump 。 Wireshark可以稍后打开生成的捕获文件,但是如果它很大,你可能仍然需要将它与editcap 。 这里有些例子:

捕获所有stream量:

 tcpdump -s 0 -n -w <filename> 

捕获除SSHstream量(通过SSH连接运行tcpdump时很有用)的所有stream量:

 tcpdump -s 0 'port not 22' -n -w <filename> 

您需要-s 0参数,以便tcpdump不会强加每个数据包的限制。

你可能不需要-n ; 我总是使用它,以便Wireshark不花费时间来parsing名称。 (没有-w可能更有用)