2013-09-17 6 views
0

У меня есть построить .Net приложение, начать захват с помощью командной строкиTshark остановить захват через несколько минут, хотя процесс все еще работает

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 code) ее работы без остановки. BTW моего wireshark версия 1.10.0 под Windows 8 x64

ответ

0

Может быть, что вы не получаете, что многие пакеты и 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.