如何按源/目标IP筛选Microsoft-Windows-WinINet-Capture的.etl文件数据包?
问题描述
背景
- 通过性能监视器的事件跟踪会话(
Microsoft-Windows-WinINet-Capture)捕获了部分程序的HTTPS流量。 - 流量已存储为
.etl文件,可通过命令tracerpt FILE_NAME.etl -o FILE_NAME.csv -of CSV查看负载内容。
遇到的问题
- 该
.etl文件混有OneNote等其他程序的流量,希望按源/目标IP筛选数据包。 tracerpt生成的CSV文件无IP字段,无法用Excel筛选。- 尝试用
pktmon转换为.pcapng失败,执行结果:
PS C:\tmp\ETW> pktmon etl2pcap _ETW_CAPTURE_TEST.etl Processing... Events lost during logging: 1 Packets total: 0 Packet drop count: 0 Packets formatted: 0 Formatted file: _ETW_CAPTURE_TEST.pcapng PS C:\tmp\ETW>
核心疑问
是否有办法按数据包的源/目标IP筛选Microsoft-Windows-WinINet-Capture生成的.etl文件中的数据包?
解决方案
方法1:XML导出+脚本解析筛选IP
Microsoft-Windows-WinINet-Capture的事件包含远程IP字段,但tracerpt默认不会导出。可通过wevtutil导出完整XML后用脚本解析:
- 导出ETL为XML格式:
wevtutil qe _ETW_CAPTURE_TEST.etl /f:xml /e:Microsoft-Windows-WinINet-Capture/HttpSendRequest > wininet_events.xml
(若需包含全部事件类型,移除/e参数即可)
- PowerShell解析并筛选:
以下脚本提取关键信息,筛选目标IP后导出为CSV:
$xmlContent = [xml](Get-Content wininet_events.xml) $xmlContent.Event | ForEach-Object { $dataFields = $_.EventData.Data [PSCustomObject]@{ 进程名 = ($dataFields | Where-Object { $_.Name -eq 'ProcessName' }).'#text' 远程IP = ($dataFields | Where-Object { $_.Name -eq 'RemoteIpAddress' }).'#text' 请求URL = ($dataFields | Where-Object { $_.Name -eq 'Url' }).'#text' 时间戳 = $_.System.TimeCreated.SystemTime } } | Where-Object { $_.远程IP -eq '你的目标IP' } | Export-Csv -Path filtered_traffic.csv -NoTypeInformation -Encoding UTF8
方法2:用Windows Performance Analyzer(WPA)可视化筛选
Windows SDK自带的WPA工具可直接加载ETL并筛选:
- 打开
wpa.exe,将ETL文件拖拽到窗口中 - 在左侧「Graph Explorer」中找到
WinINet→HTTP Requests,添加到分析视图 - 在表格视图右键选择「Add Columns」,添加
Remote IP Address、Process Name等字段 - 在表格的筛选框输入目标IP,即可过滤出对应流量
方法3:重新捕获时提前筛选(可选)
若允许重新捕获,可在创建跟踪会话时直接过滤,避免混入无关流量:
- 按进程ID筛选(替换为目标程序PID):
logman create trace WinINet-Filtered -o filtered_capture.etl -p Microsoft-Windows-WinINet-Capture -f bincirc -max 1024 -ets logman update trace WinINet-Filtered -p Microsoft-Windows-WinINet-Capture 0x0 0x0 -filter "ProcessId=1234" -ets
- 按远程IP筛选:
logman update trace WinINet-Filtered -p Microsoft-Windows-WinINet-Capture 0x0 0x0 -filter "RemoteIpAddress=你的目标IP" -ets
内容的提问来源于stack exchange,提问作者SATO Yusuke
相关产品推荐
相关产品推荐

