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