如何从 tshark 的 stderr 捕获实时数据包计数?

问题描述 投票:0回答:1

当记录到文件时,Tshark 每秒大约两次将数据包计数打印到 stderr。但是,当尝试从另一个程序监视 stderr 流时,它似乎丢失了。

一个简单的 tshark 调用,没有 stderr 重定向:

C:\Users\myUser>tshark -i Wi-Fi -F pcap -w DeleteMe.pcap
Capturing on 'Wi-Fi'
 ** (tshark:14716) 15:49:15.611145 [Main MESSAGE] -- Capture started.
 ** (tshark:14716) 15:49:15.614750 [Main MESSAGE] -- File: "DeleteMe.pcap"
47
tshark:

我相信 tshark 只使用回车符( 代替 )以便更新出现在同一行。 “47”是我结束程序之前的最后一次更新。 “tshark:”后面出现的最终数据包计数摘要丢失。

但是,如果我将 stderr 重定向到文件(当 stderr 由另一个程序监视时会出现类似的结果):

C:\Users\a1084081>tshark -i Wi-Fi -F pcap -w DeleteMe.pcap 2> out.txt

C:\Users\a1084081>out.txt

我在 out.txt 中得到以下内容:

Capturing on 'Wi-Fi'
 ** (tshark:26228) 15:51:29.006613 [Main MESSAGE] -- Capture started.
 ** (tshark:26228) 15:51:29.006738 [Main MESSAGE] -- File: "DeleteMe.pcap"
tshark: 
16 packets captured

这里没有实时数据包计数,但我确实在“tshark:”之后收到了最终数据包计数

根本问题是:“为什么当我监控输出时,输出会发生变化?”

我们的目标是获得实时反馈,表明我们在录制时收到了预期的流量。这使我们能够在发生任何故障时立即终止并重新启动我们的程序。任何替代建议将不胜感激。我正在尝试从 C# .NET 项目调用和监视 tshark。

.net stderr tshark
1个回答
0
投票

“为什么当我监控输出时,输出会发生变化?”

因为 TShark 检查标准错误是否是终端,如果不是,则不打印正在运行的数据包计数,它只打印最终数据包计数。如果输出被监视,它可能会发送到文件或管道,而它们都不是终端。

© www.soinside.com 2019 - 2024. All rights reserved.