微软在2018年10月10日的Windows 10更新中悄悄增加了内置的网络数据包嗅探器,自发布以来一直没有引起人们的注意。
数据包嗅探器或网络嗅探器是一种程序,它监视流经计算机的网络活动,一直到单个数据包级别。
网络管理员可以使用它来诊断网络问题、查看网络上正在使用哪些类型的程序,甚至监听通过明文发送的网络对话。
虽然Linux用户总是有tcpdump工具来执行网络嗅探,但Windows用户必须安装第三方程序,如Microsoft Network Monitor和Wireshark。
当微软发布2018年10月的更新后,这一切都改变了,因为现在Windows10附带了一个新的数据包监控程序,名为pktmon.exe。
随着Windows 10 2018年10月更新的发布,微软悄悄增加了一个名为C:\WINDOWS\system32\pktmon.exe的新网络诊断和数据包监控程序。
此程序的说明为监视内部数据包传播和数据包丢弃报告,这表明它是为诊断网络问题而设计的。
与Windows';netsh trace';命令类似,它可用于对通过计算机发送的数据执行完整的数据包检查。
这个程序在微软的网站上没有提到我们可以找到,我们必须通过玩这个程序来学习如何使用它。
谢天谢地,它还包括一个相当广泛的帮助系统,可以通过键入pktmon[command]help';来使用。
例如,pktmon筛选器帮助将为您显示筛选器命令的帮助屏幕。
要了解如何使用Pktmon,我强烈建议您通读帮助文档并试用该程序。我们还在下一节中提供了一个示例来帮助您入门。
遗憾的是,深入了解Pktmon的全部功能集超出了本文的范围,但是我们想向您展示一个如何使用该工具的基本示例。
对于我们的示例,我们将使用Pktmon来监视来自运行它的计算机的FTP流量。
为此,我们首先需要启动Windows10提升的命令提示符,因为Pktmon需要管理员权限。
然后,我们需要创建两个数据包筛选器,告诉Pktmon要监视什么流量,在我们的示例中是TCP端口20和21上的流量。
对于我们要监视的每个端口,可以使用pktmon filter add-p[port]命令创建这些过滤器。
然后,您可以使用pktmon filter list命令查看我们刚刚创建的包过滤器。
要开始监视与TCP端口20和21通信的数据包,我们需要使用pktmon start--etw命令。
一旦执行,pktmon会将设备上所有网络接口上的所有数据包记录到一个名为PktMon.etl的文件中,并且只记录数据包的前128个字节。
要使其记录整个数据包并且仅记录来自特定以太网设备的数据包,可以使用-p0(捕获整个数据包)和-c13(仅从ID为13的适配器捕获)参数。
要确定适配器的ID,可以运行命令pktmon comp list命令。
要停止捕获数据包,输入pktmon stop命令,将在包含原始捕获数据的同一文件夹中创建一个名为PktMon.etl的日志文件。
此文件中的数据不能直接使用,因此需要使用以下命令将其转换为人类可读的文本格式:
即使转换为文本,它也不会给出完整的数据包,而只是网络流量的摘要,如下所示。
为了从捕获的数据中获益,我建议您下载并安装Microsoft网络监视器,并使用它来查看ETL文件。
使用网络监视器,您可以查看发送的完整数据包,包括任何明文信息。
例如,您可以在下面看到一个数据包,其中包含我们在登录此FTP测试站点时输入的明文密码。
使用Pktmon程序完成后,您可以使用以下命令删除所有创建的筛选器:
随着即将发布的Windows 10 2020年5月更新(Windows 10 2004),Microsoft更新了Pktmon工具,使您能够实时显示监控的数据包,并将ETL文件转换为PCAPNG格式。
在下一次特性更新中即将发布的Pktmon版本中,您可以使用-l实时参数启用实时监控。
这将导致捕获的数据包直接显示在屏幕上,同时还会将其保存到ETL文件。
微软还增加了将ETL文件转换为PCAPNG格式的功能,这样它们就可以在Wireshark等程序中使用。
一旦文件转换为PCAPNG格式,就可以在Wireshark中打开它们,这样您就可以更好地查看网络通信。
同样,这些功能在Windows 10 1903/1909中不可用,将在本月底Windows 10 2004发布时提供。