PNetAnalyzer

PNetAnalyzer is a process-network monitor based on ETW.

库的地址: PNetAnalyzer

TraceEvent原理

详解请参阅The TraceEvent Library Programmers Guide.

ETW的架构组成有三部分如下:

基于ETW的Windows网络分析工具

  1. Event Session: 对应c#类Microsoft.Diagnostics.Tracing.TraceEventSession, 扮演着整个ETW机制中”控制器”的人物,它能够决定收集什么类型的Event Provider所供给的日志信息,什么时候收集开始/结束,收集数据的转发/存储等;
  2. Event Provider: 对应c#类Microsoft.Diagnostics.Tracing.EventSource, 在ETW中作为一个”生产者”的人物而存在,它是windows日志系统的一部分,用户能够根据不同的Provider来获取自己感兴趣的内容;
  3. Event Consumer: 对应c#类Microsoft.Diagnostics.Tracing.TraceEventSource, 从文件或许Comsumer处拿出数据进行分析收拾。

Event Consumer拿到的数据是UNPARSED数据,此处就用到了TraceEventParser之类的解析器来对原始数据进行解析。解析的办法有两种:

  1. 运行时解析: 简单来说就是拿到原始数据再由用户来解析;
  2. 编译期解析: etw供给了一些解析类,经过这些类,用户就不必对原始数据进行格局化;

不同点点击: Static vs. DynamicTraceEventParserparsers

对于编译期解析而言,ETW供给了下图的一些类:

基于ETW的Windows网络分析工具

  • KernelTraceEventParser: 解析内核事情,例如DLL loading, process start/stop, CPU sampling, page faults, Disk I/O file I/O, memory, etc;
  • ClrTraceEventParser: 解析.NET CLR事情,例如GC events, Just in Time compilation events, Exception events, etc;
  • DynamicTraceEventParser: 清楚每个Event Provider的格局,该parser在运行时经过manifests对不同的provider数据进行解析;
  • RegisteredTraceEventParser: 解析每一个在上操作系统运用wevtutil命令行引起的注册事情;
  • WPPTraceEventParser: 解析每一个运用WPP Tracingsystem引起的事情, 设备驱动和其它基础组件运用该机制;
  • JScriptTraceEventParser: 解析JavaScript运行时事情;
  • TPLTraceEventParser: 解析Task Parallel库事情(例如c#的System.Threading.Tasks);
  • ASPNetTraceEventParser: 解析ASP.NET事情;

Overview

参阅: Review of the Fundamental TraceEvent Architecture

  1. TraceEventSession开启新的ETW sessions来监控相关的ETW providers,并将数据重定向;

  2. ETW providers有两种:

    • windows os kernel provider,包含.NET, JScript运行时等;
    • 用户自定义的Event Provider;
  3. hook相关的ETWTraceEventSource来获取相关的event数据流;

  4. ETWTraceEventSource的供给的事情数据是为解析的,因而需求运用相关的TraceEventParser来对数据进行解析:

    • 编译期解析: 要解析的event格局在编译期现已确定,因而运用这种办法功率会很高(编译期解析需求运用TraceParserGen生成相关的minifests,系统的event简直都有相关的manifests,因而不必用户生成);
    • 运行时解析: 用户运行时手动解析hook到的event事情数据;
  5. 在确定了想要重视的etw providers之后,调用ETWTraceEventSource.Process()来获取ETW数据流,并对数据进行处理。

PerfView

perfview是一款微软基于TraceEventLibrary开发的开源功能分析工具。

Pktmon

pktmon 是一个windows官方供给的十分强壮的网络确诊工具,它有两种基本模式tracecapture:

  1. trace模式: pktmon会经过trace不同的ETW provider来获取不同的功能数据;
  2. capture模式: 会像wireshark相同进行抓包;

Reference

Components

Event Tracing for Windows (ETW)

Listing of ETW (Event Tracing for Windows) Providers and their GUIDs for Windows 7×64