默认情况下,在Wireshark中记录跟踪时,在其中找不到进程id。有时这些信息对于调查你所面临的问题是必要的。我这周碰到了这样的一个问题。我需要在虚拟机(本地地址10.0.2.5)上找到一个进程,该虚拟机仍在使用TLSv1连接到我们的负载平衡器。起初,我只在Wireshark中记录了跟踪并对其进行了过滤(ssl.record.version==”TLS 1.0“):
显然,他们的要求是有的。由于整个通信量(握手除外)是加密的,因此无法猜测是谁发送了这些数据包。幸运的是,TLS在底层使用TCP,每个TCP包都有一个端口号,该端口号在给定时间唯一地标识一个进程。因此,如果我们在记录Wireshark跟踪时收集这些信息,我们将能够完成分析。我首选的方法是使用过程监视器。由于进程监视器跟踪可能会快速增长,因此最好删除除TCP/IP类别之外的所有事件(Filter -> Drop Filtered Events):
运行procmon后,我们可以在Wireshark中重新记录网络流量。完成后,我们需要将Wireshark中的默认时间格式(View->time Display format->time of Day或只需按Ctrl+Alt+2)更改为Process Monitor中使用的格式。现在,是时候找出其中一个可疑事件并节省时间和源端口:
利用这些信息,我们可以在procmon跟踪中找到相应的事件,并通过检查其属性,了解创建给定网络数据包的过程。事件的时间略有不同(Wireshark使用WinPcap/npcap驱动程序,而Process Monitor依赖ETW TCP/IP事件),但通常情况下,这不应该是个问题。如果您查看上面的procmon屏幕截图,您将看到我正在查找的进程是ImageVerifier.exe。
如果需要远程执行此类诊断,并且只能访问远程计算机上的命令行,则可以考虑使用TShark和wtrace(带参数:–filter TCPIP–nosummary)代替Wireshark和Process Monitor。