Tshark прекращает захват через несколько минут, хотя процесс все еще выполняется
У меня есть сборка.Net приложения, которые начинают захватывать с помощью командной строки
private void startCapturing(string path)
{
string args = string.Format("-i 1 -s 65535 -w {0}", Path.Combine(@"D:\Downloads", path));
}
protected void invokeProcess(WiresharkProcesses process, string args)
{
try
{
string processToInvoke = null;
validateProcess(process);
switch (process)
{
case WiresharkProcesses.Capinfo:
processToInvoke = Path.Combine(getbBasePath, "capinfos.exe");
break;
case WiresharkProcesses.Editcap:
processToInvoke = Path.Combine(getbBasePath, "editcap.exe");
break;
case WiresharkProcesses.Tshark:
processToInvoke = Path.Combine(getbBasePath, "tshark.exe");
break;
case WiresharkProcesses.Wireshark:
processToInvoke = Path.Combine(getbBasePath, "wireshark.exe");
break;
}
ProcessStartInfo processStartInfo = new ProcessStartInfo(processToInvoke);
processStartInfo.Arguments = args;
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
processStartInfo.ErrorDialog = false;
Process pros = Process.Start(processStartInfo);
}
catch (Exception ex)
{
cw(ex.Message);
}
}
все работает нормально, но через несколько минут (когда процесс thark все еще выполняется) я вижу, что новые пакеты не получены (я просто открываю запись на моем диске) и истекшее время (статистика -> сводка) не увеличивается.
Если я использую ту же команду, но непосредственно из командной строки (без кода.Net), она работает без остановки. Кстати мой wireshark
версия 1.10.0 под Windows 8 x64
1 ответ
Возможно, вы не получаете столько пакетов, а tshark их буферизует. Так что, похоже, что tshark на некоторое время прекратил захват. Чтобы убедиться, что tshark не буферизует пакеты:
tshark -l
Со страницы руководства:
-l Flush the standard output after the information for each packet is printed.
[...]
This may be useful when piping the output of TShark to another program, as it
means that the program to which the output is piped will see the dissected
data for a packet as soon as TShark sees the packet and generates that
output, rather than seeing it only when the standard output buffer containing
that data fills up.