【问题标题】:How to Run WireShark Commands in command line through C#如何通过 C# 在命令行中运行 WireShark 命令
【发布时间】:2020-03-11 14:29:28
【问题描述】:

我想使用以下命令将 .pcapng 文件转换为 .csv 文件:

     > cd C:\Program Files\Wireshark
     > tshark -r output.pcapng -T fields -e frame.number -e eth.src -e eth.dst -e frame.len -e frame.time -e frame.time_relative -e data -E header=y -E separator=, > output.csv

在 C# 中,我使用了以下代码。

        string command = @"cd C:\Program Files\Wireshark & tshark -r output.pcapng -T fields -e frame.number -e eth.src -e eth.dst -e frame.len -e frame.time -e frame.time_relative -e data -E header=y -E separator=, > output.csv";
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "CMD.exe";
        startInfo.Arguments = command;
        startInfo.Verb = "runas";
        process.StartInfo = startInfo;
        process.Start();
        process.WaitForExit();

这似乎不起作用。

【问题讨论】:

  • 如果它不起作用,您应该会收到某种错误消息或其他指示它不起作用。您应该在问题中说明这一点。
  • 你只想运行wireshark,为什么还要启动一个shell (cmd.exe)?
  • @RobertHarvey 没有。我没有收到任何错误。在一毫秒内,一个窗口在执行完最后一行即WaitForExit后打开和关闭。
  • @Neil 我想将 .pcapng 转换为带有过滤器的 csv 文件,这是执行此操作的命令。
  • 您正试图从 shell 中启动 tshark,这使得获取正确参数变得更加棘手。由于我猜您这样做只是为了说服 tshark 写入文件,因此请考虑将 -w output.csv 参数添加到 tshark 命令中。那么你可能根本不需要 shell。

标签: c# cmd wireshark tshark


【解决方案1】:

检查该路径:

string command = @"cd C:\ProgramFiles\Wireshark & tshark -r output.pcapng -T fields -e frame.number -e eth.src -e eth.dst -e frame.len -e frame.time -e frame.time_relative -e data -E header=y -E separator=, > output.csv";

在我的机器上,Program Files 两个词之间有一个空格,Wireshark & tshark 也很可疑。与符号(尤其是在使用 shell 时)的解释不同。

【讨论】:

  • 是的。 Program 和 Files 之间的空格是一个错误。更正后,我收到此错误 - 'tshark' 未被识别为内部或外部命令、可运行程序或批处理文件。
  • tshark 是否在 Wireshark 文件夹中?如果是这样,您需要用斜杠 C:\Program Files\Wireshark\tshark 替换该 & 符号。
【解决方案2】:

来自cmd /?

Starts a new instance of the Windows command interpreter

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      Carries out the command specified by string and then terminates
<snip>

尝试将/C 添加到命令字符串的开头:

 string command = @"/C cd C:\ProgramFiles\Wireshark & tshark -r output.pcapng -T fields -e frame.number -e eth.src -e eth.dst -e frame.len -e frame.time -e frame.time_relative -e data -E header=y -E separator=, > output.csv";

更新:

下面的命令对我有用。而且双引号字符的数量不是错字。 tshark 程序路径的开头是 4,结尾是 3。

cmd /k """"C:\Program Files\Wireshark\tshark""" -r output.pcapng -T fields -e frame.number -e eth.src -e eth.dst -e frame.len -e frame.time -e frame.time_relative -e data -E header=y -E separator=, &gt; output.csv"

【讨论】:

  • 尝试在开头添加“/C”。还是没有运气
  • 然后尝试 /K 而不是 /C。它将打开 cmd 窗口并显示任何错误消息。
  • 替换为 K 后,出现此错误 - 'tshark' 未被识别为内部或外部命令、可运行程序或批处理文件。
  • 为什么要多个双引号?这是要作为输入给出的字符串吗?
  • 我出错了 - 'C:\Program' 未被识别为内部或外部命令、可运行程序或批处理文件。我使用了以下命令: cmd /K "C:\Program Files\Wireshark\tshark" -r "D:\FilesToConvert\SampleFile.pcapng" -T fields -e frame.number -e eth.src -e eth.dst -e frame.len -e frame.time -e frame.time_relative -e data -E header=y -E separator=, > "D:\FilesToConvert\output.csv"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多