当记录到文件时,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。
“为什么当我监控输出时,输出会发生变化?”
因为 TShark 检查标准错误是否是终端,如果不是,则不打印正在运行的数据包计数,它只打印最终数据包计数。如果输出被监视,它可能会发送到文件或管道,而它们都不是终端。