使用 Wireshark 嗅探特定进程的 TCP 流量

逆向工程 嗅探 线鲨
2021-06-29 01:47:27

是否可以使用 Wireshark 嗅探特定进程的 TCP 流量,甚至通过插件根据进程 ID 过滤 TCP 流量?

我正在使用 Windows 7,但我也想了解 Linux 的解决方案。

4个回答

来自 DigitalOperatives 的网络流量中的进程归因 (PAINT)/Wireshark 可能是您正在寻找的。它基于 Wireshark 1.6.5,适用于 Windows Vista 及更高版本。已于2012 年 12 月向公众发布用于研究目的,从那时起我一直在使用它。它不仅有效 - 您可以通过列过滤流量 - 而且速度非常快。

来自其开发人员的博客文章Process Attribution In Network Traffic对此进行了详细解释。

截图,取自上面链接的博客文章

好吧,如果您不想使用 Wireshark,您可以使用Microsoft Network Monitor开箱即用

更好的消息是,在 Windows 7(或 Win2008 R2)和更新版本上,您可以从命令行启动/停止捕获,而无需安装任何东西(您甚至可以远程执行)。

这篇 MSDN 博客文章解释了整个(简单)过程。

在此处输入图片说明

简短版本:

  1. 打开提升的命令提示符并运行:“netsh trace start persistent=yes capture=yes tracefile=c:\temp\nettrace-boot.etl”(确保您有一个 \temp 目录或选择其他位置)。
  2. 如果您正在跟踪启动缓慢的情况,请重现该问题或重新启动。
  3. 打开提升的命令提示符并运行:“netsh trace stop”您的跟踪将存储在 c:\temp\nettrace-boot.el 或您保存它的任何位置。您可以使用 netmon 在另一台机器上查看跟踪。

任意数据包通常与进程无关。对于已建立的 TCP 套接字,此信息可能会即时查找,但无法表达捕获过滤器以将过滤限制为单个进程。

其中一些选项是:

  • 如果您知道某个应用程序会联系某些 IP 地址或端口,则可以指定一个捕获过滤器,例如udp port 53host example.com
  • 在虚拟机 (VM) 中运行程序并从 VM 内部或从连接到 VM 外部的网桥捕获流量。
  • 在 Linux 上,创建一个隔离的网络命名空间并使用虚拟以太网 (veth) 对将新的网络命名空间与主网络命名空间连接起来。从 veth 接口的任一端捕获并在网络命名空间内启动您的进程。

对于后一种方法,我编写了一些脚本来自动化它,可以在https://github.com/Lekensteyn/netns找到它它正是为此目的而设计的,从单个进程(及其子进程)创建网络捕获,而不会泄漏其他流量。

各种其他方法,例如使用 eBPF 和自定义解剖器添加进程信息,以及适用于 Windows 和 macOS 的潜在方法可以在 Wireshark 问题跟踪器的这些问题中找到:

到 2018 年为止,对 Wireshark 的替代建议,目前 Microsoft 开发的已取代Microsoft Network Monitor 的解决方案Microsoft Message Analyzer

2016 年 10 月 28 日发布了截至本文的最新版本 1.4 版本,并且消息分析器 TechNet 博客在此之前定期发布后,在 2016 年 9 月左右神秘地进入了无线电静默状态。

更新:消息分析器已于 2019 年底退役。